"Опыт дизассемблирования большой .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 или смещение некой
метки? На этот вопрос позволяет ответить пятая строчка, из которой видно, что