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

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

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

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

26 ответов

46 просмотров

Если так, то твое соглашение либо 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-битные числа. Есть отрицательные числа, которые можно компактнее кодировать с расширением знака, всякие поправки, всякие относительные метки, поэтому чем разбирать это вручную в каждом макросе, проще заставить ассемблер разбираться, у него под это есть логика, и он сделает это лучше тебя.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта