gdb buffer stack-overflow

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 .