Size: a a a

2020 March 04

I

Ivan in pro.asm
Dmitrij V
не уверен, но можно попробовать :

movabsq $main, %r8
callq *%r8
Не уверен, что это значит. Это аргументы должны со стека теперь считываться?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Т.е. первый pop — кол-во аргументов.
Следующий pop — указатель на нулевой аргумент (имя файла).
Следующий pop — указатель на первый аргумент.
Следующий pop — указатель на второй аргумент.
Т.е. получается так:
# rbp вообще не трогаем — это забота вызываемой функции
pop %rdi
mov %rsp, %rsi
and $-16, %rsp
call main
источник

DV

Dmitrij V in pro.asm
Ivan
Не уверен, что это значит. Это аргументы должны со стека теперь считываться?
это попытка вызвать main по абсолютному адресу
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Евгений Красников (Jin X)
Т.е. первый pop — кол-во аргументов.
Следующий pop — указатель на нулевой аргумент (имя файла).
Следующий pop — указатель на первый аргумент.
Следующий pop — указатель на второй аргумент.
Т.е. получается так:
# rbp вообще не трогаем — это забота вызываемой функции
pop %rdi
mov %rsp, %rsi
and $-16, %rsp
call main
А когда ты делаешь:
pop %rdi
pop %rsi
ты подразумеваешь, что в стеке указатель на массив указателей на строки, хотя так сам массив указателей на строки и есть.
источник

DV

Dmitrij V in pro.asm
та неее, на стек аргументы кладутся только для 32бит (по крайней мере первые 6 в linux)

кстати что за платформа ? линукс или виндоус ?
источник

I

Ivan in pro.asm
Евгений Красников (Jin X)
Т.е. первый pop — кол-во аргументов.
Следующий pop — указатель на нулевой аргумент (имя файла).
Следующий pop — указатель на первый аргумент.
Следующий pop — указатель на второй аргумент.
Т.е. получается так:
# rbp вообще не трогаем — это забота вызываемой функции
pop %rdi
mov %rsp, %rsi
and $-16, %rsp
call main
Да, кажется, так работает)
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Dmitrij V
та неее, на стек аргументы кладутся только для 32бит (по крайней мере первые 6 в linux)

кстати что за платформа ? линукс или виндоус ?
А куда же тогда они должны класться в 64 битах?
источник

DV

Dmitrij V in pro.asm
On x86-64 UNIX systems(http://www.x86-64.org/documentation/abi-0.99.3.pdf), including Linux and default NetRun, the first six parameters go into rdi, rsi, rdx, rcx, r8, and r9.
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Dmitrij V
On x86-64 UNIX systems(http://www.x86-64.org/documentation/abi-0.99.3.pdf), including Linux and default NetRun, the first six parameters go into rdi, rsi, rdx, rcx, r8, and r9.
Не открывается у меня что-то этот файл, можешь прикрепить?
И там точно про параметры именно при запуске?
Вообще, при syscall по ABI x64 параметры передаются немного в другом подярке: rdi, rsi, rdx, r10, r8, r9.
Но там rcx заменён на r10, потому что инструкция syscall сохраняет в rcx значение rip.
источник

DV

Dmitrij V in pro.asm
источник

DV

Dmitrij V in pro.asm
ну main то не является системным вызовом ? или я что-то упустил из виду ?
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Dmitrij V
ну main то не является системным вызовом ? или я что-то упустил из виду ?
Не является, это я для примера :)
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Так, это передача параметров при вызове функций. Не при старте программы же.
Можешь вот это скачать и прикрепить (у меня x86-64.org почему-то не хочет грузиться)?
http://www.x86-64.org/documentation/abi.pdf
источник

ЕК

Евгений Красников (Jin X) in pro.asm
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Most important (for more information see examples below): in x86-64 the command line arguments are passed via stack:
(%rsp) -> number of arguments
8(%rsp) -> address of the name of the executable
16(%rsp) -> address of the first command line argument (if exists)
... so on ...
It is different from the function parameter passing in x86-64, which uses %rdi, %rsi and so on.
источник

DV

Dmitrij V in pro.asm
x86_64 abi
источник

DV

Dmitrij V in pro.asm
x86_64 cheatsheet
источник

ЕК

Евгений Красников (Jin X) in pro.asm
См. 34-ю страницу, там как раз про аргументы командной строки.
источник

I

Ivan in pro.asm
Евгений Красников (Jin X)
См. 34-ю страницу, там как раз про аргументы командной строки.
Danke schön
источник

DV

Dmitrij V in pro.asm
Евгений Красников (Jin X)
См. 34-ю страницу, там как раз про аргументы командной строки.
ОК, спс ! мой недочёт, до аргументов передаваемых в программы не добрался ещё ))
источник