.code q123: PUSH 040h PUSH 01000h PUSH 01000000h push 0 call VirtualAlloc lea esp, [eax+eax] q124: push eax jmp q124 retn end q123 стек увеличился а EBP этого не кажет, как был 0012FF94 так и остался, даже не дёрнулся при заполнении стека ESP 00790000 EBP 0012FF94 это вообще нормально
стек увеличился ESP 00790000 EBP 0012FF94 Просто хочу спросить разве EBP может быть меньше ESP стек начинает заполняться с адреса ESP 00F20000 и заканчивается адресом ESP 00790000 А EBP на это не реагирует Почему
Да Ещё немного повозился EBP всё таки указывает начало стека самой проги и откуда может допихать в стек ограниченный кусок данных ESP указывает последний запыханный адрес А вот где посмотреть полный размер стека с адреса по адрес при его расширении например произвольном расширении когда точный размер не указывается и прога сама берёт нужный размер стека Как определить сколько прога взяла адресов в стеке от и до EBP не показывает адрес если расширение стека происходит по другим адресам попробую ещё разобрать вышенаписанное от Clerk
Ebp это регистр общего назначения, такойже как и все остальный и не зависит от стека/Esp. Только инструкции Enter/Leave его используют, в остальном изменяет програмно для формирования стековых фреймов. Когда тред начнёт исполняться регистр Ebp будет содержать ноль. Далее уже пользовательский код, либо системный BaseThreadStart() etc., загрузит в него указатель на первый фрейм. Как определить размеры стека я уже говорил, текущий регион - сервис NtQueryVirtualMemory.
Как написать строку без использования dword регистров MASM32 меня что то не понимает add dword ptr ds:[4030A0h], 10h ; Прибавляет 10h по адресу 4030A0h inc dword ptr ds:[403080h] ; Прибавляет 1 по адресу 403080h inc dword ptr [403080h] ; не понимает dec dword ptr ds:[403080h], dword ptr [4030A0h] ; не понимает dec dword ptr ds:[403080h], 1030A0h ; не понимает mov dword ptr ds:[4030A0h], ds:[403080h] ; не понимает mov dword ptr [4030A0h], [403080h] ; не понимает mov dword ptr [4030A0h], dword ptr [403080h] ; не понимает mov dword ptr ds:[4030A0h], dword ptr [403080h] ; помещает по адресу, число 403080h Add как сложить два числа из адреса в памяти не присваивая числу метку или регистр Mov или переместить из одного адреса в другой без присваивания числу метки или регистра и без стека MASM32 меня что то не понимает
Вернее если стек использовать, то вот так понимает push dword ptr ds:[4030A0h] pop dword ptr ds:[403080h] а по другому можно и без регистров что бы поменьше строк было
Не знаю как точно спросить просто числу по адресу в памяти заранее присваивать значение не очень удобно что бы им потом манипулировать
пишу вот так сопротивляется mov dword ptr сs:[4030A0h], сs:[403080h] add dword ptr ds:[4030A0h], ds:[403080h]
вернее вот так add dword ptr ds:[4030A0h], dword ptr ds:[403080h] mov dword ptr ds:[4030A0h], dword ptr ds:[403080h]
почему не даёт манипулировать значением в памяти на прямую xchg dword ptr ds:[403090h], dword ptr ds:[4030A0h] к примеру