IA 32 чтение аргумента командной строки - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь прочитать аргументы командной строки с кодом сборки для IA 32. Я нашел объяснение, как это сделать здесь http://www.paladingrp.com/ia32.shtml. Я могу использовать указатель стека, чтобы получить количество аргументов, но Я не могу получить значение аргументов. Вот что я пытаюсь сделать:

movl 8(%esp), %edx  # Move pointer to argument 1 to edx
movl (%edx), %ebx   # Move value of edx to ebx
movl $1, %eax       # opcode for exit system call in eax
int $0x80           # return

Получаю ли я правильный указатель? Если так, как я могу получить ценность этого? Если нет, как мне получить правильный указатель?

1 Ответ

2 голосов
/ 30 ноября 2011

movl (%edx), %ebx # Move value of edx to ebx

Это не перемещает значение EDX в EBX (комментарий неверный).

Этот разыменовывает указатель в EDX и помещает результат разыменования в EBX. Таким образом, если вы вызвали вашу программу с помощью ./a.out foo, то EBX в итоге будет 0x006f6f66 (== '\0oof' ("foo\0" in little-endian)).

Я предполагаю, что это не то, что вы хотели, но ваш вопрос не очень ясен о том, что вы ожидаете, где произойдет.

...