Сейчас на форуме: vsv1 (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Access violation in OllyDGB
Посл.ответ Сообщение


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 02 февраля 2008 22:30
· Личное сообщение · #1

Помогите пожалуйста понять в чем тут дело:
PROG1.ASM:
.586P
.MODEL FLAT, STDCALL
EXTERN PROC1@0:NEAR
_DATA SEGMENT
_DATA ENDS

_TEXT SEGMENT
START:
CALL PROC1@0
RET
_TEXT ENDS
END START

PROG2.ASM:
.586P
.MODEL FLAT, STDCALL
PUBLIC PROC1

_TEXT SEGMENT
PROC1 PROC
MOV EAX, 1000
RET
PROC1 ENDS
_TEXT ENDS
END

ML /COFF /C PROG1.ASM
ML /COFF /C PROG2.ASM
LINK /SUBSYSTEM:WINDOWS PROG1.OBJ PROG2.OBJ

Загружаю PROG1.EXE в OLLYDBG, получаю: Access violation when executing [7C57B74C] - use Shift+F7/F8/F9 to pass exception to program.

Заранее спасибо всем, кто отзоветься!

-----
Give me a HANDLE and I will move the Earth.




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 03 февраля 2008 08:07
· Личное сообщение · #2

plutos, по оформлению понятно, что этот пример очень древний для такого же древнего компилятора.
В новых версиях ML (после 6) оно вообще не собирается из-за ошибки:
PROC1 ENDS
вместо:
PROC1 ENDP
Если это исправить, то работает как задумано без ошибок.
Так что нужно больше инфы:
1. Версия ML?
2. Версия LINK?
3. Версия форточек?
4. Версия Оли?

-----
Всем привет, я вернулся





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 03 февраля 2008 09:55
· Личное сообщение · #3

Macro Assembler Version 6.14.8444
Incremental Linker Version 5.12.8078
OllyDbg v1.10
Primer iz knigi "The Assembly Programming Master Book" (2005) by Vlad Pirogov.

Может автор и не думал, что кто-то загрузит этот пример в дебаггер и привел его чисто с общеобразовательными целями.
Спасибо за ответ, Bitfry!

-----
Give me a HANDLE and I will move the Earth.




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 06 февраля 2008 06:00 · Поправил: Bitfry
· Личное сообщение · #4

plutos пишет:
Может автор и не думал, что кто-то загрузит этот пример в дебаггер и привел его чисто с общеобразовательными целями.

Вспомнил! Пример работает без ошибок на WinXP.
Но на Win2000 не будет работать вообще (тихо умрёт) из-за отсутствия импорта.
Это известный глюк 2k.
Перед стартом нашего кода система обращается к функции из kernel32.dll для перехода к выполнению программы.
Но kernel32.dll не будет замаплена в виртуальную память процесса, если в импорте её никто не спросил (явно или косвенно). Так что обращение идёт в никуда.

-----
Всем привет, я вернулся





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 11 февраля 2008 00:36
· Личное сообщение · #5

Bitfry пишет:
Пример работает без ошибок на WinXP.

Абсолютно верно! Браво, Bitfry!
А я-то голову ломал!
Спасибо за настоящий ответ!
Bitfry пишет:
Но kernel32.dll не будет замаплена в виртуальную память процесса, если в импорте её никто не спросил (явно или косвенно).

Kak mne eto gramotno sdelat'? (esli mozhno, primer)

-----
Give me a HANDLE and I will move the Earth.




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 11 февраля 2008 10:08
· Личное сообщение · #6

plutos пишет:
Kak mne eto gramotno sdelat'? (esli mozhno, primer)

Добавить вызов любой API функции из kernel32.dll (и включить соответствующие инклуды) в любое место кода.
Примерно так:
;PROG1.ASM:
.586P
.MODEL FLAT, STDCALL
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
EXTERN PROC1@0:NEAR
.code
START:
CALL PROC1@0
RET
invoke GetCommandLine
END START


;PROG2.ASM:
.586P
.MODEL FLAT, STDCALL
PUBLIC PROC1
.code
PROC1 PROC
MOV EAX, 1000
RET
PROC1 ENDP
END


-----
Всем привет, я вернулся





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 12 февраля 2008 05:46
· Личное сообщение · #7

Bitfry пишет:
Добавить вызов любой API функции из kernel32.dll (и включить соответствующие инклуды) в любое место кода.

Попробовал, все работает отлично!
Bitfry, RESPECT!

-----
Give me a HANDLE and I will move the Earth.



 eXeL@B —› Вопросы новичков —› Access violation in OllyDGB
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати