Сейчас на форуме: asfa, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Ошибка при вызове функции из DLL
Посл.ответ Сообщение

Ранг: 0.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2013 22:53 · Поправил: Dmitry89
· Личное сообщение · #1

Мне нужно добавить MessageBoxA в программу, чтобы он выводился при запуске. Для этого я через CFF Explorer в разделе Import Adder подключил библиотеку USER32.dll, импортировал по имени MessageBoxA и нажал Rebuild Import Table. В меню Import Directory я получил FTs (IAT) для USER32.dll и сложил ее с 00400000 (Import Base)
Получил 16-ричное число - адрес для вызова MessageBoxA.
В Olly я добавил JMP на этот адрес, и функция вызова MessageBoxA автоматически определилась (выводится как JMP <&user32.MessageBoxA> ). Затем в коде я заполнил необходимые параметры через PUSH, и добавли CALL с адресом на JMP <&user32.MessageBoxA>.


Code:
  1. 006CD911      6A 00         PUSH 0
  2. 006CD913      6A 00         PUSH N.006CD91C
  3. 006CD915      6A 00         PUSH N.006CD92D
  4. 006CD917      6A 00         PUSH 0
  5. 006CD919      E8 FF871400   CALL <&user32.MessageBoxA>


Проблема в том, что программа просто вылетает на строчке CALL. Я думал что возможно неправильно задаю параметры. Чтобы это проверить я сделал свою DLL с фуекцией f(), которая вызывает мессенжбокс. Затем я подключил ее аналогично тому, как это делал с USER32. Но к сожалению CALL тоже крашит программу. dll я проверил и она нормально подцепляется программой, которую я написал в VC2010, т.ч. проблема явно не в ней. Если кто с таким сталкивался, подскажите как можно это исправить?



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 06 июля 2013 23:19
· Личное сообщение · #2

Dmitry89
где exe?



Ранг: 0.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2013 00:25
· Личное сообщение · #3

С проблемой разобрался, надо было адрес предварить DWORD.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 июля 2013 12:31
· Личное сообщение · #4

Видимо, на этом можно закрыть.


 eXeL@B —› Вопросы новичков —› Ошибка при вызове функции из DLL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати