"Опыт дизассемблирования большой .com - программы" - читать интересную книгу автора (Крупник А.Б.) mov bx,OFFSET d09006 ;08f66
...................................... ;----------------------------------------------------- d09006: push dx ;09006 ...................................... ret ;09010 Рассмотрим еще один пример косвенного вызова подпрограммы, в котором OFFSET попадает в область данных. s390 proc near .......................................................... mov ax,WORD PTR [bx+8792h] ;092c7 mov WORD PTR ds:d087d2,ax ;092cb ........................................................... call WORD PTR cs:d087d2 ;093c8 ret ;093d4 ;----------------------------------------------------- ror ah,1 ;093d5 ;LO]-->[HI..LO]-->[HI jb b093da ;093d7 ;Jump if < (no sign) ret ;093d9 b093da: inc si ;093da ret ;093db ............................................................ со смещениями, близкими к этому числу. Приведем соответствующий фрагмент, вы- данный дизассемблером: d08790 db 00,00,0d5,93 ;08790 ...... ............................................................. Видно, что смещению 08792 соответствует слово 0d5,93. Теперь остается заметить, что со смещения 093d5 в исходной программе начинается фрагмент повисшего кода ror ah,1 ;093d5 !!!!!! ;LO]-->[HI..LO]-->[HI jb b093da ;093d7 ;Jump if < (no sign) ret ;093d9 b093da: inc si ;093da ret ;093db Следовательно,весь разобранный пример - это хитроумный косвенный вызов под- программы. Исправленный фрагмент должен выглядеть так: s390 proc near .......................................................... mov ax,WORD PTR [bx+OFFSET d08792] ;092c7 mov WORD PTR ds:d087d2,ax ;092cb ........................................................... call WORD PTR cs:d087d2 ;093c8 |
|
|