Size: a a a

2020 March 16

U

UsernameAK in pro.asm
UsernameAK
Который _start или который main?
Тогда ответь на это
источник

U

UsernameAK in pro.asm
Если прям в самом-самом энтрипоинте, то там нет адреса возврата на большинстве платформ
источник

DV

Dmitrij V in pro.asm
походу это под переменные argc и argv ...
источник

U

UsernameAK in pro.asm
Dmitrij V
походу это под переменные argc и argv ...
Они как раз занимают с выравниванием 16 байт
источник

U

UsernameAK in pro.asm
Поэтому на него не влияют
источник

DV

Dmitrij V in pro.asm
ну да, сначала под них резервируется место, а потом стек выравнивается...
источник

DV

Dmitrij V in pro.asm
хотя гоню...
источник

U

UsernameAK in pro.asm
На стеке минимальное выравнивание на x86/арме/ещё чем - sizeof(void*)
источник

U

UsernameAK in pro.asm
Однако calling convention'ы почему то требуют 16 байт на фрейм
источник

DV

Dmitrij V in pro.asm
короче: так решил компилятор, и тут ничего не поделаешь ))
источник

ЕК

Евгений Красников (Jin X) in pro.asm
R G
утверджается что после вычитания 8 из начального значения esp он станет кратным 16ти. Почему так??
Это в 64-х битах перед вызовом функции стак выравнивается по 16 байтам. Поэтому 8 байт на адрес возврата, остается ещё 8 (либо push rbp, либо sub rsp,8) — вот тебе и снова выравнивание по 16 байта.

В 32-х битах такого нет. Это либо под локальные переменные, либо х/з что за прикол.
источник

ЕК

Евгений Красников (Jin X) in pro.asm
UsernameAK
Однако calling convention'ы почему то требуют 16 байт на фрейм
Это где такое требование?
источник

U

UsernameAK in pro.asm
Евгений Красников (Jin X)
Это где такое требование?
не помню в каком CC
источник

U

UsernameAK in pro.asm
но было
источник

DV

Dmitrij V in pro.asm
#abi

2.2.2    The Stack FrameIn addition to registers, each function has a frame on the run-time stack. This stackgrows downwards from high addresses. Table  2.2 shows the stack organization.The end of the input argument area shall be aligned on a 16 (32, if__m256ispassed on stack) byte boundary.  In other words, the value(%esp+ 4)is alwaysa multiple of16(32) when control is transferred to the function entry point.  Thestack pointer,%esp, always points to the end of the latest allocated stack frame.

https://www.uclibc.org/docs/psABI-i386.pdf
источник

RG

R G in pro.asm
Евгений Красников (Jin X)
Это в 64-х битах перед вызовом функции стак выравнивается по 16 байтам. Поэтому 8 байт на адрес возврата, остается ещё 8 (либо push rbp, либо sub rsp,8) — вот тебе и снова выравнивание по 16 байта.

В 32-х битах такого нет. Это либо под локальные переменные, либо х/з что за прикол.
Спасибо !
источник

RG

R G in pro.asm
вроде понял
источник

RG

R G in pro.asm
Евгений Красников (Jin X)
Это в 64-х битах перед вызовом функции стак выравнивается по 16 байтам. Поэтому 8 байт на адрес возврата, остается ещё 8 (либо push rbp, либо sub rsp,8) — вот тебе и снова выравнивание по 16 байта.

В 32-х битах такого нет. Это либо под локальные переменные, либо х/з что за прикол.
в энтрипоинте у нас запушен адрес возврата?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
R G
в энтрипоинте у нас запушен адрес возврата?
В винде нет, насколько я знаю (а вот в потоках вроде да). В линуксе запушены параметры, переменные окружения и ещё что-то там, т.е. считай, что нет
источник

s

s54816 in pro.asm
Евгений Красников (Jin X)
В винде нет, насколько я знаю (а вот в потоках вроде да). В линуксе запушены параметры, переменные окружения и ещё что-то там, т.е. считай, что нет
А в винде бывает код без потоков?
источник