gdb - Encuentra la dirección exacta de la variable Buf
buffer stack-overflow (3)
El operador &
trabajará cuando gdb esté configurado en modo de lenguaje C (y Objective-C).
En cualquier modo de idioma puedes usar
(gdb) info address buf
Symbol "buf" is static storage at address 0x903278.
(El resultado no corresponde exactamente a su código). Estoy escribiendo esta respuesta porque esta pregunta la encuentran incluso las personas que buscan la respuesta para otros idiomas (incluido yo mismo). También se puede cambiar siempre al modo C mediante el set language c
, pero los nombres de los símbolos pueden ser diferentes después de este cambio.
Como referencia, estoy usando el siguiente código:
#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;
}
¿Cómo puedo hacer que gdb
me muestre la dirección de la variable buf
?
Si ingresa lo siguiente en gdb, obtendrá la dirección:
start
p &buf
como en la siguiente transcripción:
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)
(gdb) p &a
si necesita la dirección de la variable a
. Sin embargo, una variable podría almacenarse en caché en un registro, en cuyo caso GDB le diría la address requested for identifier "a" which is in register $xxx
.
Nota al margen: no usar gets
, ver here .