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

Просто я так понимаю, что большинство функций я вызываю stdcall,

а сишные функции почему-то cdecl , эти функции ч должен отчищать

А как я пойму какое соглашения я вызвал, если моя инструкция
Push str
Call [printf]?

26 ответов

41 просмотр

Если так, то твое соглашение либо pascal, либо stdcall

Alexey- Автор вопроса
The Bird of Hermes
Если так, то твое соглашение либо pascal, либо std...

Как так, я в одних функциях отчищаю стек, в других нет - хотя везде пишу call

Alexey
Как так, я в одних функциях отчищаю стек, в других...

Разные соглашения о вызовах. Где-то ты будешь через регистры передавать аргументы - fastcall или thiscall

Alexey- Автор вопроса
The Bird of Hermes
Разные соглашения о вызовах. Где-то ты будешь чере...

Там в макросах у Томаша много неоптимизированных моментов, потому что Томаш пишет от души, и вообще он старичок, целых 20 лет один и тот же проект полностью чисто на ассемблере пишет, так что его надо уважать.

Alexey- Автор вопроса
The Bird of Hermes
Разные соглашения о вызовах. Где-то ты будешь чере...

Ну хорошо а если я положу аргументы в регистры и напишу call, то случится конец света?

Alexey
Фаст наверное, thiscall я вообще не знаю

fastcall - на х86_32 будет передача через eax, ecx, edx. thiscall - первый аргумент - указатель на экземпляр, передаётся в ecx

Alexey
Ну хорошо а если я положу аргументы в регистры и н...

Тут зависит от функции. Если не ты писал функцию, то ты не можешь определять соглашение о вызовах

КТ315
Там в макросах у Томаша много неоптимизированных м...

virtual origin = $ mov rax,param load opcode byte from origin+1 end virtual if opcode = 0B8h mov rax,param mov [rsp+(counter-1)*8],rax else mov qword [rsp+(counter-1)*8],param end if А еще меня заинтересовала эта штука

The Bird of Hermes
virtual origin = $ mov rax,par...

FASM может читать свой же код.

КТ315
FASM может читать свой же код.

Да я в курсе, но что именно он тут отлавливает?

Alexey- Автор вопроса
The Bird of Hermes
Надо полазать и заоптимизировать)

а я хочу в fasmw полазить, так и манит код посмотреть

The Bird of Hermes
Да я в курсе, но что именно он тут отлавливает?

Я понял. Опкод B8 это когда значение слишком большое. И в mov qword[], значение - оно не влезет, поэтому умный Томаш определил опкод, и если FASM сгенерировал B8, тогда он сначала пихает в регистр, а из регистра в память, а если значение маленькое (меньше 64 бит), тогда просто пихает сразу напрямую.

КТ315
Я понял. Опкод B8 это когда значение слишком больш...

Своеобразный самомодифицирующийся код, к слову.

КТ315
Своеобразный самомодифицирующийся код, к слову.

Не, это условная генерация кода. Хотя он мог бы так не извращаться и сразу, если это число, проверить, что оно больше чем 32 бита. По сути тут нет именно модификации кода, так как тот опкод, который он читает, находится в виртуальном пространстве и не проецируется на реальную память

КТ315
Томаш так решил, значит надо.

Он сам делает так, как я сказал, в инициализции локальных переменных)

КТ315
Ничего не понял.

Ну в макросе local/locals. Там он если надо загрузить данные из области в 8 байт при условии что значение там больше 4 байт загружает по очереди по 4 байта

The Bird of Hermes
Ну в макросе local/locals. Там он если надо загруз...

Ну, значит код старый просто, и он не успел переписать этот участок. Это в старой какой-то версии может нельзя было так проверять. Не знаю.

КТ315
Ничего не понял.

Зато я только что понял как мне сделать то, что я хочу - макрос jret)

КТ315
Ну, значит код старый просто, и он не успел перепи...

И теперь я наконец смогу ещё больше автоматизировать даже ручные штуки вроде закрытия функции джампом на другую)

The Bird of Hermes
Не, это условная генерация кода. Хотя он мог бы та...

Я не знаю, почему конкретно тут опкод читается, но в целом Томаш это делает, потому что не все значения — просто n-битные числа. Есть отрицательные числа, которые можно компактнее кодировать с расширением знака, всякие поправки, всякие относительные метки, поэтому чем разбирать это вручную в каждом макросе, проще заставить ассемблер разбираться, у него под это есть логика, и он сделает это лучше тебя.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта