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

 eXeL@B —› Вопросы новичков —› Помогите найти ошибку!!!
Посл.ответ Сообщение

Ранг: 10.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 мая 2007 20:02
· Личное сообщение · #1

Доброго дня.
Заинтересовал ассемблер, взял статью с www.wasm.ru/print.php?article=1022001, все получаестя(потихоньку въезжаю), но когда че то не получается наступает ступор. Проблема в том что когда запускаю файл которы просто рисует точку на экране в графическом режиме под ДОС и ждет нажатия клавиши, у меня почему то начинает мерцать экран(как-будто перелистывается), при этом я вижу эту точку, если нажимаю клавишу то выскакивает с ощибкой "Процессор NTVDM обнаружил недопустимую инструкцию. ........................" Может проблема в том что работаю на ноуте??? как исправить, или что почитать!!!

a0f4_28.05.2007_CRACKLAB.rU.tgz - graf.com



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

Создано: 29 мая 2007 01:10
· Личное сообщение · #2

Главная ошибка у тебя с переходами (jz, jmp).
Префикс 66h зачем-то влепил, смещение на 100h не учёл и т.п.

Почитай мои статьи bitfry.narod.ru
Там, конечно не про машинный код (в основном), но всё доходчиво от самого "подвала".

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





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 29 мая 2007 07:53
· Личное сообщение · #3

А у меня нормально всё запускается. Че то может с версией NTVDM.

Да ты сильно то в маш. код не ударяйся. Читай статьи Битфрая там всё по порядку.

-----
radio uno in ibisa ...




Ранг: 10.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2007 11:09
· Личное сообщение · #4

Bitfry пишет:
Почитай мои статьи bitfry.narod.ru
Там, конечно не про машинный код (в основном), но всё доходчиво от самого "подвала".


Читаю паралельно и твои статьи, очень доходчиво написано, большое спасибо. Просто хотелось бы запустить у себя и порадоватся немного. не все ведь сразу получается.



Ранг: 10.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 мая 2007 12:35
· Личное сообщение · #5

Bitfry пишет:
Префикс 66h зачем-то влепил, смещение на 100h не учёл и т.п.


смещение 100h, сморю через codeview, показывает 1275:0100 сначало
а то за перфикс 66h, где я его влепил???



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

Создано: 30 мая 2007 14:40 · Поправил: Bitfry
· Личное сообщение · #6

Abram пишет:
смещение 100h, сморю через codeview, показывает 1275:0100 сначало


Вот строчка из CV:
0ACD:0119 660F840A01 JE 0228
Обрати внимание на адрес 0228 перехода. Тебе разве туда надо?
Так получается из-за того, что ты (или компилятор) неверно сформировал машинную команду для данной команды ассемблера.

Разберём по байтам:
66 – префикс размера операнда
Когда выполняется код в 16-битном режиме (а com-файлы по определению 16-битные), этот префикс заставляет воспринимать операнды в текущей команде как 32-битные. Если режим 32-бита, то наоборот – операнд становится 16-битный.
Пример:
Одни и те же байты будут трактоваться по-разному.
16-битный режим дизассемблирования:
00000000: 66B8AAAAAAAA mov eax,0AAAAAAAA
32-битный режим дизассемблирования:
00000000: 66B8AAAA mov ax,0AAAA
00000004: AA stosb
00000005: AA stosb

Таким образом, в 16-битном режиме для 16-битного операнда, префикс вообще не нужен.
Кроме того, в случае с командой je её единственный операнд является адресом, а для адресов существует специальный префикс - префикс размера адреса (67h). Так что 66 здесь не к селу не к городу.

Дальше идёт опкод команды - 0F84.
Это опкод ближнего перехода.
Переходы бывают:
короткими (в приделах EIP/IP + длина команды + знаковый байт);
ближними (в приделах EIP/IP + длина команды + знаковый WORD/DWORD);
дальними (загрузка нового сегмента и значения EIP/IP).

В данном случае хватит короткого перехода (74 вместо 0F84). Потом один байт + к EIP. Всё команда закончена!

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





Ранг: 75.0 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 30 мая 2007 15:54 · Поправил: Headerx
· Личное сообщение · #7

а в этом коде мне непонятно что делает и для чего предназначены эти инструкции (я их выделил жирным шрифтом)
; ===========[ Program Entry Point ]===========
00401000 6A00 PUSH 00H ; lpModuleName
00401002 E8 E3020000 CALL KERNEL32!GetModuleHandleA
00401007 A3 4C304000 MOV DWORD PTR DS:[0040304CH], EAX



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

Создано: 30 мая 2007 16:11
· Личное сообщение · #8

Headerx, это шутка такая? Или ты не в ту тему попал.
Headerx пишет:
00401000 6A00 PUSH 00H ; lpModuleName
00401002 E8 E3020000 CALL KERNEL32!GetModuleHandleA
00401007 A3 4C304000 MOV DWORD PTR DS:[0040304CH], EAX

=
invoke GetModuleHandle, NULL
mov hInstance,eax

Headerx пишет:
0040102E C745D0 30000000 MOV DWORD PTR SS:[EBP-30H],00000030H

=
mov wc.cbSize,SIZEOF WNDCLASSEX

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





Ранг: 75.0 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 30 мая 2007 16:24 · Поправил: Headerx
· Личное сообщение · #9

Bitfry
это не шутка. повторяю предназначение этих инструкции кто нить можт мне разжевать все это?
извените если чо




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 30 мая 2007 17:47 · Поправил: Icelot
· Личное сообщение · #10

Эти команды помещают в переменную hInstance (которая по адресу 0040304CH) dword значение - хендл возвращенный в EAX API-функцией GetModuleHandleA:

The GetModuleHandle function returns a module handle for the specified module if the file has been mapped into the address space of the calling process. чего тут не ясно может быть еще?

-----
radio uno in ibisa ...





Ранг: 75.0 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 30 мая 2007 17:53
· Личное сообщение · #11

спасибо
ну а двоеточие после DS что делает что за оператор?




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 30 мая 2007 18:56 · Поправил: Icelot
· Личное сообщение · #12

DS:[xxxxxxxx]
DS-это сегмент
[xxxxxxxx] - это смещение в нём
Двоеточие это не оператор, так принято просто указывать адреса. Хотя в PM это уже не имеете прежнего значения.

З.Ы. Headerx ты или издеваешься или тебе срочно нужно -> сюда <- http://www.bitfry.narod.ru/
Cегменты и смещения http://bitfry.narod.ru/11.htm#bit11 - поточнее.

-----
radio uno in ibisa ...





Ранг: 75.0 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 31 мая 2007 16:53
· Личное сообщение · #13

Icelot пишет:
З.Ы. Headerx ты или издеваешься или тебе срочно нужно -> сюда <-

может это ты издеваешься, ты чо думаеш что я никогда не открывал учебник по асму? это тебе не html или бэсик которые можно освоить за 3 дня а высшее исскуство. я уже освоил ее на %=25, а остальное освоить будет труднее. но нет ничего невозможного. у любого возникают вопросы.




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 01 июня 2007 08:33
· Личное сообщение · #14

Headerx ну ладно ладно тебе Я сам то и на 50 не освоил. Просто в самом начале темы была ссылка на статьи Битфрая там всё это описано, вот я и сказал.

-----
radio uno in ibisa ...



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


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