Я хотел бы знать, как просматривать аргументы командной строки, переданные функции с помощью gdb.Изучение строк с использованием gdb
Чтобы проверить это, я составил следующий код
.global main
main:
pushl %ebp
movl %esp, %ebp
movl $1, %eax
movl $0, %ebx
int $0x80
с
gcc -Wall -Wextra -g -m32 args.s
вызывать ассемблер и компоновщик.
Моя система - x86_64 ubuntu (но для обучения я начал создавать 32-битные приложения).
Я начал GDB и передаются аргументы командной строки 2 с
start test 12345
На данный момент я ожидал, что стек выглядеть следующим образом:
- Адрес аргумента 2 < - $ EBP + 20
- Адрес аргумента 1 < - $ ebp + 16
- Адресное имя программы < - $ ebp + 12
- ARGC < - $ EBP + 8
- старый EIP < - $ EBP + 4
- старый EBP < - $ EBP
Чтение аргумент счетчика
(gdb) x /d $ebp+8
дает ожидаемые результаты:
0xffffd110: 3
Теперь я попытался проверить аргументы командной строки, которые были переданы. Я ожидал
x /x $ebp+16
, чтобы указать адрес первого символа первого переданного аргумента в памяти. Выход был:
0xffffd118: 0xb4
Но когда я попытался получить доступ к этому региону
(gdb) x /x 0xb4
я получил:
0xb4: Cannot access memory at address 0xb4
Что приводит меня к выводу, что я пытался получить доступ к локации отличается от того места, где хранятся мои аргументы командной строки.
Может ли кто-нибудь дать мне несколько указателей на истинное местоположение аргументов командной строки?