Articles of debugging

与GDB远程debugging错误

我试图远程debuggingx86_64 suse linux上的32位应用程序,但得到这个“远程寄存器格式错误”的错误。 我启动gdbserver侦听端口12345(gdbserver localhost:12345 my_prog) 这是错误的: $ gdb GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely […]

GDB没有这样的文件或目录

我正在关注OpenSecurityTraining的这些经验教训。 我已经到了实验室,在那里我要用CMU炸弹训练自己。 他们提供了一个x86_64编译的CMU炸弹,你可以在这里find: CMU炸弹x86-64最初来自CMU实验室计算机系统:程序员的视angular(CS:APP)第一版 32位炸弹。 我有一个虚拟化的64位基本操作系统发行版,我可以毫不费力的使用GDB反汇编CMU Bomb。 现在,我有一个64位的Ubuntu 14.04 LTS(未虚拟化),当我试图重现为什么我做了我的基本操作系统,我得到了着名的错误。 我运行这些命令: gdb ./bomb-x64 (gdb) b main Breakpoint 1 at 0x400dbd: file bomb.c, line 37. — why bomb.c ? (gdb) r … bomb.c: no such file or directory 编辑:我可以在CMU炸弹的其他function上创build断点,并按预期工作。 例如: (gdb) b phase_1 Breakpoint 3 at 0x400f00 (gdb) r Breakpoint 1, 0x0000000000400f00 in phase_1 () (gdb) […]

检查正在运行的程序中的内存泄漏

出于对检查内存泄漏的好奇心,我有个疑问。 作为一个在过去的一两年中经常使用valgrind来检查代码中的内存泄漏的人,我突然想到在程序生命周期之后 ,它只能检测到丢失/未logging的内存。 所以,有鉴于此,我在想,如果你有一个长期运行的程序, malloc()是间歇性的,在应用程序退出之前不会free() ,那么潜在的吃内存(不一定是通过泄漏 )是巨大的,使用这些工具是不可观察的,因为他们只检查程序的生命周期。 是否有类似GDB的工具可以在运行时停止应用程序,并检查在应用程序生命周期中是否被引用的内存?

你如何设置debugging过程的当前目录?

我有一个应用程序是敏感的目录它被调用 – 它加载一些文件使用相对path。 当我通过debugging器启动程序时,如何控制当前的初始目录? 我宁愿避免添加特殊的代码到debugging的程序,使其调用chdir ; 我的直觉是,debugging器应该提供某种方式来指定外部,因为无论如何它本质上是一个外部设置。 我正在使用的debugging器是TotalView,但我打开其他Linuxdebugging器的答案,因为它可以帮助我find一个类似的电视设置。 当我调用程序时,我可以指定环境variables,所以在百灵公司,我试图设置PWD ,但没有运气。

如何访问.gdbinit和gdb内部的环境variables?

我在用gdb进行debugging时,正在设置源代码的path。 我select用.gdbinit文件来做到这一点。 基本上它包含一个命令: directory="/path/to/src". 不过,我希望能够指定该命令为: directory="$SOURCESROOT/src" SOURCESROOT是一个环境variables。 而且,如果可能的话,也可以在gdb的debuuging会话中通过inputdirectory=$SOURCESROOT/folder来做到这一点。 基本上,我正在寻找访问内部gdb(或内部.gdbinit)的环境variables。 但不是恶魔的环境(设置env等),而是gdb本身的环境(即我在第一个input“gdb程序”的bash提示符处)。 在gdb会话中inputshell $SOURCESROOT显示环境variables的内容时,这是无用的,因为我不能input: directory=shell $SOURCESROOT 。 PS:任何人都会发现Linux(Debian)的理想设置是使用“apt-get source”来下载源代码,并使用某种“apt-get update”utopic命令更新这些源代码并安装它们,以便gdb自动查找来源?

perl-mechanize遇到限制 – 开始几个debugging尝试

你好亲爱的开发者 首先 – 抱歉作为新手..我是相当新的Perl。 我试图学习一些关于Perl的同时玩代码和片段。 今天我有一个脚本,运行一个机械化的工作..但有点不跑到最后。 Waht的目标是:我想获得一些wesite-sceenshots的缩略图。 以及我运行这个脚本,这是写的做一些网站的截图我也起来和运行mozrepl。 最奇怪的是输出 – 见下面…问题:我应该改变脚本为什么我输出? #!/usr/bin/perl use strict; use warnings; use WWW::Mechanize::Firefox; my $mech = new WWW::Mechanize::Firefox(); open(INPUT, "<urls.txt") or die $!; while (<INPUT>) { chomp; print "$_\n"; $mech->get($_); my $png = $mech->content_as_png(); my $name = "$_"; $name =~s/^www\.//; $name .= ".png"; open(OUTPUT, ">$name"); print OUTPUT $png; sleep (5); […]

在Visual Studio 2017中使用远程debugging时,Linux控制台输出在哪里?

我的Visual Studio 2017(VS2017)通过以下代码成功连接到Linux系统: #include <cstdio> int main() { printf("hello from ConsoleApplication1!\n"); return 0; } 但是,执行代码时,我看不到“ConsoleApplication1的问候! 消息在VS2017输出窗口中。 我在哪里可以find它?

亚马逊linux – 安装openjdk-debuginfo?

我试图在amazon linux上使用ec2实例上的jstack 。 所以我安装了openjdk-devel软件包。 sudo yum install java-1.7.0-openjdk-devel.x86_64 但是jstack引发了exceptionjava.lang.reflect.InvocationTargetException 。 sudo -u tomcat jstack -J-d64 -m 941 谷歌会议15分钟后,我发现一些qna说安装openjdk-debuginfo软件包可能会有所帮助。 但是我怎样才能安装openjdk-debuginfo ? 这不是在yum search 。

逐行debugging

我有一个用帕斯卡写的脚本。 我会这样debugging它:停在每一行,转储内存中所有variables的值,并转到下一行。 是否有可能使用gdb或其他一些开放源码的Linux工具?

ASLR和地址

看看这个主要的: int main() { int asd = 10; printf("%p\n", &asd); return 0; } asd在给定时刻的地址: 0x7ffff5f7c16c 主要地址(总是一样的): (gdb) disass main Dump of assembler code for function main: 0x00000000004005b4 <+0>: push %rbp 为什么一个正则c程序的variables的地址在每次执行时都会改变,而程序本身的起始地址总是相同的(假设它不是位置独立的)? 我发现地址变化是由ASLR模式引起的,但是为什么它只影响程序variables,并不影响代码的分配位置? 这是否与作为代码部分ro的事实有关,如果不是绝对必要的,它是没有意义的随机化的? 此外,为什么主要的地址与variablesasd的地址之间有巨大的差距?