LINUX.ORG.RU

Как происходит передача аргументов в функцию (arm)?


0

2

Как устроен этот процесс?
Пытаюсь узнать, какие аргументы передаются функции SDL_main из соседней функции в бинарнике.
Должны передаваться фальшивые argc и argv. Первый аргумент всегда равен единице (видно в дизассемблере), на второй должен подаваться массив из аргументов.
По всей видимости аргументы перед переходом скидываются в несколько первых регистров.
Чтобы перехватить аргументы, я изменил адрес в инструкции перехода, указывающий на внешнюю функцию.
В gdb получаю, что первый аргумент всегда 1, как и должно быть, а второй равен реальному argv.
Если пробросить аргументы в ту функцию, куда они назначались, программа ведёт себя, будто их и не было (крашится через некоторое время), хотя изначально выполнение проходило дальше.

★★★★★
Ответ на: комментарий от kravich

Вот блин! И правда:

#include <stdio.h>

int main(int c, char **v){
	int i = 0;
	printf("argc = %d\n", c);
	while(*v){
		printf("%dth arg: %s\n", ++i, *v++);
	}
}
./a.out раз два три
argc = 4
1th arg: ./a.out
2th arg: раз
3th arg: два
4th arg: три

Т.е. argc нужен лишь для того, чтобы не считать количество аргументов. Ну я и коняра!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну я и коняра!

Сколько лет я этого ждал!:)

Pavval ★★★★★
()

милые бранятся - только тешатся :)

yyk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.