随笔分类 - Translation
摘要:介绍多阶段加载是基于如下这种想法:如果一个小片段的shellcode可以在目标上执行,理论上可以通过网络连接、传输和执行其他的shellcode,或者甚至是一个完整的二进制可执行文件。关键的想法是对加载的最终程序进行分级。这样子,只有严格大小的代码会在第一阶段加载。这种想法在一篇优秀的文章<<Understanding Windows Shellcode>>中有详细介绍。第一阶段:shellcode加载这是在加载链中至关重要的一步。代码必须够小,没有NULLs值并且必须能够在各种平台上执行。它的主要功能是找到用于连接的套接字描述符,并通过它读取额外的数据。当完成时,加载
阅读全文
摘要:a.修改内存的通用步骤http://www.outflux.net/blog/archives/category/reverse-engineering/1.首先在/proc/PID/maps中找到相应的位置2.寻找相关的内存attach上去后(gdb) find /w 0x0a22e000, 0x0b08a000, 2193933.查看内存相关信息(gdb) x/8x 0xaf06ca84.修改内存相关信息(gdb) set var *0xaf06cac = 0x00100bb8等等相关步骤。b.转自scz1.在GDB里将指定范围的内存数据转储成二进制文件http://www.sczgrou
阅读全文
摘要:Extending GDB详情在http://sources.redhat.com/gdb/current/onlinedocs/gdb.html#Extending-GDB,具体还需要进一步实例应用set script-extension off All scripts are always evaluated as gdb Command Files. set script-extension soft The debugger determines the scripting language based on filename extension. If this scripting
阅读全文
摘要:1.gdb中dump内存http://ioctl.eu/blog/2009/05/06/memory_dump_gdbMemory Dump with GDBAltough gdb is not a real low-level debugger, it has some quite interesting low-level functionality. (gdb) dump binary memory dump.raw 0x00800000 0x01000000 Dumps the memory of the currently debugged application into a fi
阅读全文
摘要:11.调试优化的代码几乎所有的编译器都支持优化。禁用掉优化后,编译器生成的汇编代码通过简单的方式直接对应到你的源代码。由于编译器提供了更强大的优化能力,生成的汇编代码与源代码变得不尽相对应了。由编译器生成的调试信息的帮助下,gdb可以从正在运行的程序映射出源代码的结构。gdb在禁用掉优化后更准确。如果你可以使用不优化来重新编译,很容易在调试过程中跟踪你的程序的过程。但是,有许多情况下,您可能需要调试优化后的版本。当你调试用'-g -O'编译的程序,请记住,优化已经重新安排你的代码,调试器会显示那里存在什么。不要对执行路径没有准确符合源文件感到奇怪。一个极端的例子:如果你定义一个
阅读全文
摘要:本文主要取自Debugging with GDB中第10部分的一些技巧1.程序里产生Core文件 How to Produce a Core File from Your ProgramA core file or core dump is a file that records the memory image of a running process and its process status (register values etc.). Its primary use is post-mortem debugging of a program that crashed while i
阅读全文
摘要:Debugging with GDB已经有一份中文翻译,在这边中文翻译的基础上将文档中新增的部分以及没有翻译的后继部分进行翻译,对gdb达到一个质的应用。这是第10部分的选出来的一些技巧10.4 模糊表达式表达式有时会包含一些模糊的元素。例如,一些编程语言(特别是Ada,C++和Objective-C语言)允许一个简单的函数名在不同的语境中被定义多次。这就是所谓的重载。涉及Ada的另一个例子是通用的。一个普通包类似C++模板以及可以被实例化多次,导致在相同的函数名在不同的上下文中被定义。在某些情况下,根据语言,它是可能删除一些模糊的地方来调整表达。比如在C++中,你可以指定想要下断点的函数特征
阅读全文