Сейчас на форуме: vsv1 (+3 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Access violation in OllyDGB |
Посл.ответ | Сообщение |
|
Создано: 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. ![]() |
|
Создано: 03 февраля 2008 08:07 · Личное сообщение · #2 plutos, по оформлению понятно, что этот пример очень древний для такого же древнего компилятора. В новых версиях ML (после 6) оно вообще не собирается из-за ошибки: PROC1 ENDS вместо: PROC1 ENDP Если это исправить, то работает как задумано без ошибок. Так что нужно больше инфы: 1. Версия ML? 2. Версия LINK? 3. Версия форточек? 4. Версия Оли? ----- Всем привет, я вернулся ![]() |
|
Создано: 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. ![]() |
|
Создано: 06 февраля 2008 06:00 · Поправил: Bitfry · Личное сообщение · #4 plutos пишет: Может автор и не думал, что кто-то загрузит этот пример в дебаггер и привел его чисто с общеобразовательными целями. Вспомнил! Пример работает без ошибок на WinXP. Но на Win2000 не будет работать вообще (тихо умрёт) из-за отсутствия импорта. Это известный глюк 2k. Перед стартом нашего кода система обращается к функции из kernel32.dll для перехода к выполнению программы. Но kernel32.dll не будет замаплена в виртуальную память процесса, если в импорте её никто не спросил (явно или косвенно). Так что обращение идёт в никуда. ----- Всем привет, я вернулся ![]() |
|
Создано: 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. ![]() |
|
Создано: 11 февраля 2008 10:08 · Личное сообщение · #6 plutos пишет: Kak mne eto gramotno sdelat'? (esli mozhno, primer) Добавить вызов любой API функции из kernel32.dll (и включить соответствующие инклуды) в любое место кода. Примерно так: ;PROG1.ASM:
;PROG2.ASM:
----- Всем привет, я вернулся ![]() |
|
Создано: 12 февраля 2008 05:46 · Личное сообщение · #7 |
![]() |
eXeL@B —› Вопросы новичков —› Access violation in OllyDGB |