delta-offset
Не могу понять до конца, как получать дельта смещение.
Вот есть след строки:
[1234:0200h] call Get_IP
[1234:0203h] Get_IP:
[1234:0203h] pop ax
[1234:0204h] sub ax,offset Get_IP
Компилятор при ассемблировании вместо Get_IP поставит ее адрес - получится:
[1234:0200h] call 0203h
[1234:0203h] pop ax
[1234:0204h] sub ax,0203h
Т.е. 203 это типа константы. Дальше заражаем файл размером 1000h, получаем:
[1234:1200h] call Get_IP
[1234:1203h] Get_IP:
[1234:1203h] pop ax
[1234:1204h] sub ax,offset Get_IP
Но ведь Get_IP= 203h, тогда call Get_IP должен перенести нас не по адресу 1203h,а
по адресу 203h,а почему-то так не получается.
Я понимаю, что call кладет в стек адрес следующей за ним инструкции и ах затем
будет = 1203h, но почему Get_IP поменялся с 203h на 1203h не понятно, это же
константа????
Номер выпуска : 4836
Возраст листа : 694 (дней)
Количество подписчиков : 528
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/418184
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
Все дело в том, что в команде call указывается относительный адрес той
команды, на которую происходит переход. Относительно адреса команды, которая
непосредственно следует за командой call. Поэтому куда бы в файле мы не
записали приведенный код, call всегда будет вызывать просто следующую за ней
команду :-)
Да, Get_IP - константа :-) Но ассемблер при создании объектного модуля
вычисляет смещение до нее относительно следующей команды, и в качестве
операнда команды call сует это смещение.
А процессор при выполнении команды call не делает IP := смещение, а делает
IP := IP + смещение.
Номер выпуска : 4841
Возраст листа : 695 (дней)
Количество подписчиков : 527
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/418684
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru