169 похожих чатов

Какой смисил такого кода? asm call Label Label: pop ax sub ax, offset

Label

В ax всегда же будет 0?

42 ответов

106 просмотров

нулевой смысл

Vlad- Автор вопроса
Timofej 17.1
нулевой смысл

А если серьезно?

У тебя в ах ничего не помещено

в ax будет регистр ip

Alexey
У тебя в ах ничего не помещено

не знаете - не советуйте

Mixail Frolov
не знаете - не советуйте

А что туда помещаться

Vlad- Автор вопроса
Mixail Frolov
в ax будет регистр ip

В ax будет адрес метки Label, але потім sub ax, offset Label должен оьнулить?

Alexey
А что туда помещаться

reg ax = reg ip на момент вызова подпрограммы

Vlad- Автор вопроса

w[esp] = retAddr и esp+2 ax = retAddr и esp-2 ax - retAddr = 0 Да, будет ноль. Китайский код: видимость деятельности без самой деятельности. Потому что чем больше кода тем выше зарплата. Аххах.

Vlad- Автор вопроса
Станислав Баранцев
w[esp] = retAddr и esp+2 ax = retAddr и esp-2 ax -...

Да но дальше в книге показано що в ax буде 1000

Alexey
А что туда помещаться

адрес метки после call

Это нужно для вычисления виртуального адреса программы. После pop ax в AX будет виртуальный адрес на метку Label, а после sub ax, offset от виртуального адреса на метку отнимется смещения метки в коде, и мы получим начальный адрес.

Vlad- Автор вопроса
КТ315
Это нужно для вычисления виртуального адреса прогр...

ОК, а чем виртуальний адрес отличається от offset?

КТ315
Это нужно для вычисления виртуального адреса прогр...

Неужели? При компиляции call delta станет call 401014 например А offset delta тоже станет 401014. Константы вбитые жёстко в код. Тут не может быть вычислений.

Vlad
ОК, а чем виртуальний адрес отличається от offset?

Я же написал - offset это смещение. Относительно 0.

Станислав Баранцев
Неужели? При компиляции call delta станет call 40...

Нет, там будет относительный call. Опкод такой.

Vlad- Автор вопроса
КТ315
Нет, там будет относительный call. Опкод такой.

Может быть. Вполне. Я правда когда дизассемблирую то даже относительные адреса влсстанавливаю до абсолютных. Опкоды есть и по относительным и по абсолютным. Только отладчик развеет наши сомнения!

Станислав Баранцев
Может быть. Вполне. Я правда когда дизассемблирую...

У меня никаких сомнений нет, я этот трюк с вычислением IP наизусть знаю, и там у call всегда будет относительный опкод. Хватит новичка путать в таких очевидных вопросах.

Vlad
Я тоже так думав

Ты хотя бы код вручную тоже собирай, отлаживай. Сам увидишь, что там вычисляется в AX.

Vlad- Автор вопроса
Vlad
screenshot не понимаю(

Код покажи.

Vlad- Автор вопроса
КТ315
Код покажи.

Просто call Label

Vlad
Просто call Label

sub как написал, покажи.

Vlad- Автор вопроса
Vlad
screenshot

а теперь сделай тоже самое для винды в формате PE

Vlad
screenshot

Всё правильно работает. Ты в своём пространстве запускаешь, поэтому 0. У тебя org установлен.

КТ315
Всё правильно работает. Ты в своём пространстве за...

Перекинешь в чужое пространство - там будет виртуальный адрес другой, будет уже не 103-103.

Mixail Frolov
а теперь сделай тоже самое для винды в формате PE

хотя там вроде тоже ничего не будет, не помню

Vlad
screenshot не понимаю(

Ты тут ещё не показал как у тебя call опкод выглядит.

Это для ДОС?

Vlad- Автор вопроса

В ax будет адрес Label

А потом 0

Vlad
Да

Скинь всю книжку, интересно почитать, что они имеют в виду.

Vlad- Автор вопроса
randomize usr
Скинь всю книжку, интересно почитать, что они имею...

Книжка "Асемблер это просто" О. Калашников

Vlad- Автор вопроса
The Bird of Hermes
А потом 0

Мне уже КТ все обяснив

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта