Tag: gdb

GDB是否正确解释了内存地址?

我正在使用GDB检查内存地址的内容,但不知道它是否正确显示。 (gdb) p (char *)0x8182f40 $4 = 0x8182f40 “XYZ” (gdb) (gdb) x/40x 0x8182f40-16 0x8182f30: 0x00000000 0x00000000 0x000000a8 0x00000010 0x8182f40: 0x005a5958 0x00000000 0x00000000 0x00000029 0x8182f50: 0x00000000 0x00000000 0x00010000 0x082439d8 0x8182f60: 0x08199100 0x00000000 0x08000000 0x00002f08 0x8182f70: 0x00000002 0x000000b1 0x00000000 0x00000000 0x8182f80: 0x00000000 0x00000000 0x00000000 0x00000000 0x8182f90: 0x00000000 0x00000000 0x000000d4 0x00000002 0x8182fa0: 0x000003f1 0x00007162 0x00000002 0x08178d00 0x8182fb0: 0x00000000 […]

gdb意外行为:嵌套if

我在用 p12user@ubuntu:~$ uname -a Linux ubuntu 2.6.32-40-generic #87-Ubuntu SMP Tue Mar 6 00:56:56 UTC 2012 x86_64 GNU/Linux p12user@ubuntu:~$ gdb -v GNU gdb (GDB) 7.1-ubuntu Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, […]

C – 无法访问地址处的内存

调试GDB时告诉我以下错误: 0x800c99ed00000001 如果在调试时调用ConvertByteArrayToFloat时放置断点,则会产生错误。 但该程序没有问题退出并给我一个好的结果? 我的主要档案: #include “Local.h” int main(void) { if(HandleReceivedMessages() == OP_COMPLETED){ printf(“Main Completed \n” ); } else { printf(“Main Failed \n”); } return 0; } Local.h #ifndef LOCAL_H_ #define LOCAL_H_ #include “Common.h” T_OP_STATUS HandleReceivedMessages(void); #endif Local.c #include “Handler.h” #include “Local.h” uint8_t message[] = {0x86, 0x9a, 0xa0, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x10, […]

声明变量堆栈

我有2个文件名为auth_overflow&auth_overflow2,唯一的区别是变量声明的序列。 我的问题是,声明序列是否会根据FILO影响它们的堆栈序列(先排在后面)? auth_overflow bash-4.2$ gdb -q auth_overflow Reading symbols from /home/reader/hacking/auth_overflow…done. (gdb) list 5 int check_authetication (char *password) { 6 int auth_flag = 0; 7 char password_buffer[16]; 8 9 strcpy(password_buffer, password); (gdb) break 9 Breakpoint 1 at 0x804850d: file auth_overflow.c, line 9. (gdb) run AAAAAAAAAAAA Starting program: /home/reader/hacking/auth_overflow AAAAAAAAAAAA Breakpoint 1, check_authetication (password=0xbffff7f3 ‘A’ ) […]

如何在使用gdb调试递归函数时跳过一部分

这是我程序中的一个function void quicksort (int *num, int p, int r, int june) { int q, bbc, ccd; if (p < r) { call++; q = partition (num, p, r, june);//<–I want to skip this call in gdb session bbc = q – 1 – p + 1;//<– and want to continue execution step by step from […]

堆栈跟踪中“纯虚拟”调用的含义是什么?

我的服务崩溃了,我有这个堆栈跟踪。 我无法从这里推断出任何东西 00007f859cd27834 __gnu_cxx::__verbose_terminate_handler() @ 00007f859cd25865 __cxxabiv1::__terminate(void (*)()) @ 00007f859cd25892 std::terminate() @ 00007f859cd263be __cxa_pure_virtual @ 0000000001996f9f My::Class::~Class() 有人可以帮忙吗?

IA32注册地址

我有几个互相关联的问题让我失望。 我正在进行一项任务,我必须在gdb查看汇编代码,以找到使C程序正常工作的正确输入。 为了测试这个,我输入一个由一些数字组成的测试字符串,并逐步读取/读取程序集以预测其行为并找出解决方案。 这是主要问题:在某一点上,我的整个输入字符串存储在%eax寄存器中。 我打电话的时候: x/a $eax 它返回一个hex,我假设它是%eax的地址。 此时,hex的最后一个字节会根据输入而变化。 程序在输入字符串上调用strtol()后不久,从字符串中删除第一个数字,并将缩短的字符串放回%eax 。 事情变得令人困惑:似乎无论原始输入有多长或附加输入有多长,当我在$eax上调用x/a时,返回的hex值的最后一个字节似乎总是等于32。是一个问题,因为在使用%eax地址的最后一个字节之后不久有一个cmp测试,而数字32会导致程序故意崩溃。 我误解了x/a的使用,事实上,我返回的hex根本不是一个地址吗? 输入的大小是否会影响注册表的地址? 任何其他有用的提示可以帮助我在这种情况下? 非常感谢

GDB可以防止错误

使用gdb时,我在不同的C项目上遇到了这个问题。 如果我在没有它的情况下运行我的程序,它会在给定的事件中始终崩溃,可能是因为内存读取无效。 我尝试用gdb调试它,但是当我这样做时,崩溃似乎永远不会发生! 知道为什么会这样吗? 我在Windows上使用mingw工具链。

makefile中的gdb和valgrind

我有一个非常基本的问题。 我确实在这里环顾四周http://www.cs.cmu.edu/~gilpin/tutorial/但仍然怀疑.. 考虑以下makefile(在之前的问题中也给出了它) all: clients.so simulator backup LD_PRELOAD=/home/Juggler/client/clients.so ./simulator backup: backup.c libclient.a gcc backup.c -o backup -L /home/Juggler/client -L. -lclient -ldl simulator: simulator.c libclient.a gcc -g simulator.c -o simulator -L /home/Juggler/client -L. -lclient -ldl -pthread libclient.a: libclient.o client.o ar rcs libclient.a libclient.o client.o libclient.o:libclient.c gcc -c libclient.c -o libclient.o -pthread clients.so: client.o client_invoke.o ld -shared […]

__strcpy_sse2_unaligned with -fno-builtin

我正在调试我的程序,然后最后一行发生了,我该如何解决? 我使用-fno-builtin来查看strcpy()但它显示__strcpy_sse2_unaligned被调用。 root@19:~/booksrc# gcc -fno-builtin -g char_array2.c root@19:~/booksrc# gdb -q ./a.out Reading symbols from ./a.out…done. (gdb) list 1 #include 2 #include 3 4 int main() { 5 char str_a[20]; 6 7 strcpy(str_a, “Hello World!\n”); 8 printf(str_a); 9 } (gdb) break 6 Breakpoint 1 at 0x708: file char_array2.c, line 6. (gdb) break strcpy Breakpoint 2 at […]