Подтвердить что ты не робот

Найти точный адрес переменной Buf

В качестве ссылки я использую следующий код:

#include <stdio.h>
#include <string.h>

int main (void) {
    char buf[100]; // ------> How do I find the address in gdb?

    printf ("Buffer is at memory location: %08x\n", &buf);
    strcpy (buf, "some random text");
    printf ("Text is [%s]\n", buf);

    return 0;
}

Как я могу получить gdb, чтобы показать мне адрес переменной buf?

4b9b3361

Ответ 1

(gdb) p &a, если вам нужен адрес переменной a. Переменная может быть кэширована в регистре, но в этом случае GDB сообщит вам address requested for identifier "a" which is in register $xxx.

Sidenote: не используйте gets, см. здесь.

Ответ 2

Если вы вводите следующее в gdb, вы получите адрес:

start
p &buf

как в следующем расшифровке:

pax$ gdb ./qq.exe
GNU gdb 6.8.0.20080328-cvs (cygwin-special)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-cygwin"...
(gdb) start
Breakpoint 1 at 0x401144: file qq.c, line 2.
Starting program: /home/pax/qq.exe
[New thread 2912.0xf9c]
[New thread 2912.0x518]
main () at qq.c:2
2       int main (int argc, char **argv) {
(gdb) p &buf
$1 = (char (*)[100]) 0x22ccd0
(gdb)

Ответ 3

Оператор & будет работать, когда gdb установлен в режим языка C (и Objective-C).

В любом языковом режиме вы можете использовать

(gdb) info address buf
Symbol "buf" is static storage at address 0x903278.

(Результат не соответствует именно вашему коду.) Я пишу этот ответ, потому что этот вопрос встречается даже людьми, которые ищут ответ для других языков (включая меня). Также всегда можно переключиться в режим C на set language c, но после этого изменения названия символов могут отличаться.