Tag: 反汇编

粉碎堆栈example3.c混乱

文章可以在这里找到。 我正在阅读粉碎堆栈并发现自己被卡在example3.c上。 0x80004a3 : call 0x8000470 0x80004a8 : addl $0xc,%esp 0x80004ab : movl $0x1,0xfffffffc(%ebp) 0x80004b2 : movl 0xfffffffc(%ebp),%eax 作者指出我们想要从0x80004a8跳到0x80004b2并且这个跳转是8个字节; 作者如何确定这是8个字节? 我重新创建了代码并通过objdump发送它,发现它不是8个字节(我在64位机器上,但我确保使用32位编译): 8048452: e8 b5 ff ff ff call 804840c 8048457: c7 44 24 1c 01 00 00 movl $0x1,0x1c(%esp) 804845e: 00 804845f: 8b 44 24 1c mov 0x1c(%esp),%eax 8048463: 89 44 24 04 mov %eax,0x4(%esp) […]

反汇编Microsoft Visual Studio 2003编译器输出

我看到我认为Microsoft Visual Studio 2003工具输出的目标文件的奇怪行为。 file实用程序告诉我: asmfile.obj: 80386 COFF executable not stripped – version 30821 对于汇编程序创建的对象,但对于来自C文件的对象,我得到: cfile.obj: data 使用Microsoft的dumpbin实用程序和我从cygwin获得的objdump ,我可以反汇编程序集生成的文件,但是我从C-built文件的任一实用程序中都得不到有用的结果。 我有几个与这种差异有关的问题: MSVC2003编译器生成的目标文件格式是什么? 我该如何反汇编该目标文件? 我对使用AT&T语法进行反汇编特别感兴趣 – 我正在使用一个大型源代码库的端口来使其与GCC一起工作,我想使用此方法作为一些内联汇编例程的快捷方式。项目。 编辑:添加更多信息。 当我在其中一个文件上运行dumpbin时没有给出任何结果: C:\> dumpbin /disasm Func.obj Microsoft (R) COFF/PE Dumper Version 7.10.6030 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file Func.obj FileType: ANONYMOUS OBJECT 使用objdump ,它给出: $ objdump […]

我可以给objdump一个地址并让它反汇编包含的函数吗?

我发现为了获得足够的上下文以查看导致崩溃的原因,必须反汇编大量的库代码真的很烦人。 有什么方法可以直接objdump一个地址,让它为我找到包含函数的边界? 编辑:更好的是,我可以让它拆卸整个堆栈跟踪吗?

确定哪个编译器构建了Win32 PE

如何确定使用哪个C或C ++编译器来构建特定的Windows可执行文件或DLL? 有些编译器在最终的可执行文件中留下了版本字符串,但这在Windows上似乎比在Linux上更少见。 具体来说,我有兴趣区分Visual C ++和各种MinGW编译器(通常很容易从函数签名),然后在Visual C ++版本之间(6,2002 / 2003,2005,2008;更难做)。 有没有一种工具能够以半可靠的方式进行区分?

为什么这个内存地址%fs:0x28(fs )有一个随机值?

我写了一段C代码,我已经拆解了它,并且读取了寄存器以了解程序在汇编中的工作原理。 int test(char *this){ char sum_buf[6]; strncpy(sum_buf,this,32); return 0; } 我一直在研究的代码是测试function。 当我反汇编输出我的测试function时,我得到… 0x00000000004005c0 : mov %fs:0x28,%rax => 0x00000000004005c9 : mov %rax,-0x8(%rbp) … stuff .. 0x00000000004005f0 : xor %fs:0x28,%rdx 0x00000000004005f9 : je 0x400600 0x00000000004005fb : callq 0x4004a0 0x0000000000400600 : leaveq 0x0000000000400601 : retq 我想知道的是mov %fs:0x28,%rax真的在做什么?