![]() |
eXeL@B —› Основной форум —› turbo pascal и дизассемблирование |
Посл.ответ | Сообщение |
|
Создано: 14 ноября 2005 14:45 · Личное сообщение · #1 проблема такая. Мне дали программу на паскале. Я ее дизассемблировал.Вижу там вызов getmem в такой форме:
где ds:di - как я понял это адрес указателя.Туда помещается адрес выделенной памяти. То есть тут передается адрес указателя и туда записывается значение адреса выделенной памяти.Сама функция getmem ничего не возвращает. Сделал похожую программу на паскале:
и ее тоже дизассемблировал:
А тут получается, что передается только размер выделяемой памяти,а адрес выделяемой памяти возвращается через dx:ax и уже потом записывается в указатель. Вообщем-то и названия функции дизассемблер определил как разные: call @GetMem$qm7Pointer4Word ; GetMem(Pointer &,Word) и call @GetMem$q4Word ; GetMem(var p: Pointer{DX:AX}; size: Word) Вот не понимаю, как сделать так, чтобы было так же как в исходной программе.Думал разные версии компиляторов(про ту хз, а мой - 7.0).Программа file analyser сказала, что версия компилятора 6.0 или 7.0.На всякий случай скачал 6.0 - но там оказалось то же самое. ![]() |
|
Создано: 14 ноября 2005 15:01 · Личное сообщение · #2 jungle пишет: как сделать так, чтобы было так же как в исходной программе Во-первых не понятно зачем тебе это надо... Во-вторых если нужно так как в дизассемблере, то вырежи ту функцию и сделай это все ассемблерной вставкой...рипни эту процедуру. jungle пишет: Думал разные версии компиляторов Может там какая-то оптимизация была включена/отключена...? ![]() |
|
Создано: 14 ноября 2005 15:23 · Личное сообщение · #3 |
|
Создано: 14 ноября 2005 16:01 · Личное сообщение · #4 |
|
Создано: 14 ноября 2005 16:55 · Личное сообщение · #5 jungle Дык продолжал бы свои вопросы в первой теме http://www.exelab.ru/f/action=vthread&topic=2979&forum=1&p age=-1 зачем новую создал? ----- once you have tried it, you will never want anything else ![]() |
![]() |
eXeL@B —› Основной форум —› turbo pascal и дизассемблирование |