Articles of 反汇编

反汇编内存

我想直接在内存中反汇编程序的一部分。 我感兴趣的是,当我调查堆栈时,生成的代码如何看起来像一个特定的例程如何加载以及如何绑定和调用。 有没有一个可以使用的程序或库,我可以用来反汇编从一个给定的位置提取的某个字节序列?

适用于Linux的反汇编器能够反汇编旧的.COM / .EXE文件

我在这里的第一个问题,希望我没有做错。 我的问题是,我有一个老的DOS程序,已经相当多的黑客文件格式到极致,以节省空间。 (是的,这对那些知道的人来说是一个杀人刺激的刺激。) Objdump不想帮助我; 快速谷歌search没有得到真正的问题的结果,在这方面的手册也不太慷慨。 还有其他的,像利达。 然而,由于某种原因,我不能让丽达工作, 我相信有其他select。 任何人都有在Linux上反汇编DOS可执行文件的经验吗? 还是应该尝试一些基于DOS的反汇编程序,并在Dosemu上运行?

使用objdump进行ARM体系结构:反汇编到ARM

我有一个对象文件,并试图反汇编它。 当我使用: objdump -d example.o 我以elf64-x86-64的文件格式获得代码集。 我试图把这个反汇编成ARM,我该怎么做呢?

为什么gcc重新sorting函数中的局部variables?

我写了一个只读/写大型数组的C程序。 我用gcc -O0 program.c -o program编译了程序出于好奇,我用objdump -S命令来objdump -S C程序。 read_array和write_array函数的代码和程序集附在这个问题的末尾。 我正试图解释gcc如何编译函数。 我用//添加我的评论和问题 以write_array()函数的汇编代码的开始部分为write_array() 4008c1: 48 89 7d e8 mov %rdi,-0x18(%rbp) // this is the first parameter of the fuction 4008c5: 48 89 75 e0 mov %rsi,-0x20(%rbp) // this is the second parameter of the fuction 4008c9: c6 45 ff 01 movb $0x1,-0x1(%rbp) // comparing with […]

编译器:了解从小程序生成的汇编代码

我正在研究编译器是如何工作的。 我正在通过阅读从小型64位Linux程序反汇编生成的代码来学习。 我写了这个C程序: #include <stdio.h> int main() { for(int i=0;i<10;i++){ int k=0; } } 使用objdump后,我得到: 00000000004004d6 <main>: 4004d6: 55 push rbp 4004d7: 48 89 e5 mov rbp,rsp 4004da: c7 45 f8 00 00 00 00 mov DWORD PTR [rbp-0x8],0x0 4004e1: eb 0b jmp 4004ee <main+0x18> 4004e3: c7 45 fc 00 00 00 00 mov DWORD […]

帮助理解GDB中一个非常基本的main()反汇编

Heyo, 我已经写了这个非常基本的主要function来实验反汇编,也看到并希望了解底层的事情: int main() { return 6; } 使用gdb disas main产生这个: 0x08048374 <main+0>: lea 0x4(%esp),%ecx 0x08048378 <main+4>: and $0xfffffff0,%esp 0x0804837b <main+7>: pushl -0x4(%ecx) 0x0804837e <main+10>: push %ebp 0x0804837f <main+11>: mov %esp,%ebp 0x08048381 <main+13>: push %ecx 0x08048382 <main+14>: mov $0x6,%eax 0x08048387 <main+19>: pop %ecx 0x08048388 <main+20>: pop %ebp 0x08048389 <main+21>: lea -0x4(%ecx),%esp 0x0804838c <main+24>: ret 这里是我最好的猜测,我觉得是怎么回事,我需要帮助逐行: […]

理解由一个简单的C程序生成的汇编代码

我试图通过使用gdb的反汇编器来检查一个简单的C程序的组件级代码。 以下是C代码: #include <stdio.h> void function(int a, int b, int c) { char buffer1[5]; char buffer2[10]; } void main() { function(1,2,3); } 以下是main和function的反汇编代码 gdb) disass main Dump of assembler code for function main: 0x08048428 <main+0>: push %ebp 0x08048429 <main+1>: mov %esp,%ebp 0x0804842b <main+3>: and $0xfffffff0,%esp 0x0804842e <main+6>: sub $0x10,%esp 0x08048431 <main+9>: movl $0x3,0x8(%esp) 0x08048439 <main+17>: […]

如何从libopcodes获取指令信息?

我正在编写一个在x86-32和x86-64 Linux中使用libbfd和libopcodes的工具来执行反汇编。 问题是,虽然我能够获得libopcodes反汇编,我无法得到任何指示信息。 为了示范的目的,我已经做了一个再现我的问题的最小例子。 程序应该从入口点到第一个RET / RETQ 。 这个代码有点被全局变了,为了简洁起见,错误检查被省略了,但是应该清楚地说明问题。 #include <bfd.h> #include <dis-asm.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <string.h> #include <ctype.h> #include <limits.h> #include <libiberty.h> /* * Holds state for BFD and libopcodes. */ bfd * abfd = NULL; disassemble_info dinfo = {0}; /* * Temporary hack to signal […]

PE文件中没有.BSS

这是简短的控制台应用程序示例 static char buffer[4096]; int main() { for(int i=0;i<4096;i++) { buffer[i] = 1234; } return 0; } 据我所知,由编译器产生的'exe'文件应该包含.bss节来存储'buffer'variables。 我正在使用Tiny C编译器,生成的文件不包含任何对.bss的引用。 DOS Header Magic number: 0x5a4d (MZ) Bytes in last page: 144 Pages in file: 3 Relocations: 0 Size of header in paragraphs: 4 Minimum extra paragraphs: 0 Maximum extra paragraphs: 65535 Initial (relative) SS value: […]

IDA Pro反汇编,如何看看.data部分中的纯ASCII?

我正在使用IDA Pro反汇编Windows DLL文件。 有一点我有一行代码说 mov esi, dword_xxxxxxxx 我需要知道dword是什么,但双击它将带我到.data页面,一切都在问号。 我如何获得应该在那里的纯文本?