Не могу найти ошибку в процедуре

Тема в разделе "WASM.WIN32", создана пользователем zenixan, 27 июл 2007.

  1. zenixan

    zenixan New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    6
    []
    Проблема в том что при исполнение `call remalloc`, данные портяться в [ebp+4], если же подставить вместо вызова процедуры все тело процедуры

    Код (Text):
    1.     inc dword [ebp-8]
    2.     mov [ebp-12],eax
    3.     extern __imp__HeapReAlloc
    4.     push dword [ebp-8]
    5.     push dword [ebp+4]
    6.     push 0
    7.     push dword [heap]
    8.     call [__imp__HeapReAlloc]
    9.     mov [ebp+4],eax
    10.     mov eax,[ebp-12]
    11.     cmp al,' '
    то данные целые.
    Обьясните пожалуйста в чем причина. Заранее спасибо.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    тег коде для кого?
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    хорошо бы в каждом разделе форума закрепить топик с правилами форума.
     
  4. zenixan

    zenixan New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    6
    извините, не знал
     
  5. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    zenixan
    esp чем мешал?
    Лень выложить исходники? И это, вообще, что такое?
    При таком стиле вы только и будете делать, что менять и пересчитывать, и перепроверять смещения. Ошибка в аргументах при вызове HeapReAlloc, они, кажись, местами переставлены.
     
  6. zenixan

    zenixan New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    6
    Это и есть весь исходник, компилятор nasm.
    add esp,4 - Удаляю параметры из стека.
    Программа получает коммандную строку, далее розбивает полученную строку на имя программы, и ее параметры, соотвественно имя находиться в [ebp+4], параметры [ebp+n]
     
  7. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Даже разобрался. Почти.
    Все равно переставлены местами параметры. Количество байт и указатель на буфер при вызове HeapReAlloc.
     
  8. zenixan

    zenixan New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    6
    Код (Text):
    1. remalloc:
    2. extern __imp__HeapReAlloc
    3. push dword [esp+8]
    4. push dword [esp+4]
    5. push 0
    6. push dword [heap]
    7. call [__imp__HeapReAlloc]
    8. ret
    Спасибо, исправил. Вот, только другая проблема появилась, не понятно из за чего портиться указатель в [esp+4].
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    zenixan
    не понятно из за чего портиться указатель в [esp+4]
    После push dword [esp+8] значение esp уменьшается на четыре.

    Если вызов remaloc происходит так
    Код (Text):
    1. ...
    2.   push dword [dwBytes]
    3.   push dword [lpMem]
    4.   call remalloc
    5. ...
    то ее тело должно выглядеть так
    Код (Text):
    1. remalloc:
    2.   extern __imp__HeapReAlloc
    3.   push dword [esp+8]
    4.   push dword [esp+8]
    5.   push 0
    6.   push dword [heap]
    7.   call [__imp__HeapReAlloc]
    8.   ret
     
  10. zenixan

    zenixan New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    6
    Спасибо!