[] Проблема в том что при исполнение `call remalloc`, данные портяться в [ebp+4], если же подставить вместо вызова процедуры все тело процедуры Код (Text): inc dword [ebp-8] mov [ebp-12],eax extern __imp__HeapReAlloc push dword [ebp-8] push dword [ebp+4] push 0 push dword [heap] call [__imp__HeapReAlloc] mov [ebp+4],eax mov eax,[ebp-12] cmp al,' ' то данные целые. Обьясните пожалуйста в чем причина. Заранее спасибо.
zenixan esp чем мешал? Лень выложить исходники? И это, вообще, что такое? При таком стиле вы только и будете делать, что менять и пересчитывать, и перепроверять смещения. Ошибка в аргументах при вызове HeapReAlloc, они, кажись, местами переставлены.
Это и есть весь исходник, компилятор nasm. add esp,4 - Удаляю параметры из стека. Программа получает коммандную строку, далее розбивает полученную строку на имя программы, и ее параметры, соотвественно имя находиться в [ebp+4], параметры [ebp+n]
Даже разобрался. Почти. Все равно переставлены местами параметры. Количество байт и указатель на буфер при вызове HeapReAlloc.
Код (Text): remalloc: extern __imp__HeapReAlloc push dword [esp+8] push dword [esp+4] push 0 push dword [heap] call [__imp__HeapReAlloc] ret Спасибо, исправил. Вот, только другая проблема появилась, не понятно из за чего портиться указатель в [esp+4].
zenixan не понятно из за чего портиться указатель в [esp+4] После push dword [esp+8] значение esp уменьшается на четыре. Если вызов remaloc происходит так Код (Text): ... push dword [dwBytes] push dword [lpMem] call remalloc ... то ее тело должно выглядеть так Код (Text): remalloc: extern __imp__HeapReAlloc push dword [esp+8] push dword [esp+8] push 0 push dword [heap] call [__imp__HeapReAlloc] ret