"Опыт дизассемблирования большой .com - программы" - читать интересную книгу автора (Крупник А.Б.) mov cx,WORD PTR ds:d02453 ;02430
b02430: add cx,bx ;02434 mov bx,99e7h ;02436 mov dx,WORD PTR ds:d02449 ;02439 mov al,BYTE PTR ds:d02446 ;0243d call s383 ;<09060> ;02440 push cs ;02443 pop ds ;02444 ret ;02445 ;----------------------------------------------------- d02446 db 00 ;02446 . d02447 db 00,00 ;02447 .. d02449 db 00,00 ;02449 .. В поле комментариев указано смещение, которое имела данная инструкция в исход- ной программе. Например, если вы в исходной программе, подвергаемой дизассемб- лированию, посмотрите отладчиком смещение 02434, то там окажется инструкция add cx,bx - на это можно положиться! Очень хороши названия меток и элементов данных. По ним сразу можно понять, какое смещение они имели в исходной програм- ме. Например, метка b02430 имела смещение 02430, элемент данных d02446 имел смещение 02446 и т.д. То же самое относится и к подпрограммам. После вызова подпрограммы в треугольных скобках указано смещение, которое имела эта подпро- грамма в исходной программе. Например, подпрограмма s383 начиналась в исходной программе со смещения 09060. Такая организация листинга позволяет сохранить однозначное соответствие с исходной программой, что дает возможность проверить блером с тем, что есть на самом деле. Это поистине драгоценная возможность. Нужно сказать, что DisDoc имеет большие недостатки, о которых речь еще пой- дет, и, следовательно, применение того или иного дизассемблера - дело вкуса. В любом случае обязательно встретятся ФУНДАМЕНТАЛЬНЫЕ ПРОБЛЕМЫ 1. Проблема OFFSETa Предположим, что в тексте, который выдал дизаccемблер есть такой фраг- мент: mov ax,bx ;1 shl ax,1 ;004bc ;2 mov si,8429h ;3 add si,ax ;4 push WORD PTR [si] ;5 Что засылается в регистр si в третьей строчке - число 8429h или смещение некой метки? На этот вопрос позволяет ответить пятая строчка, из которой видно, что |
|
|