标签: objdump

objdump -d 输出程序集的含义

我试图弄清楚这个 objdump -d 的所有元素的含义。

例如我有:

08048b50 <phase_1>:
8048b50:    83 ec 1c                sub    $0x1c,%esp
 8048b53:   c7 44 24 04 68 a2 04    movl   $0x804a268,0x4(%esp)
 8048b5a:   08 
 8048b5b:   8b 44 24 20             mov    0x20(%esp),%eax
 8048b5f:   89 04 24                mov    %eax,(%esp)
 8048b62:   e8 63 04 00 00          call   8048fca <strings_not_equal>
 8048b67:   85 c0                   test   %eax,%eax
 8048b69:   74 05                   je     8048b70 <phase_1+0x20>
 8048b6b:   e8 f5 06 00 00          call   8049265 <explode_bomb>
 8048b70:   83 c4 1c                add    $0x1c,%esp
 8048b73:   c3                      ret    
Run Code Online (Sandbox Code Playgroud)

具体来说,我不确定第一列和中间列告诉我什么

c assembly objdump disassembly

5
推荐指数
1
解决办法
2976
查看次数

如何从 ELF 文件中禁用地址随机化 (ASLR)?

已解决: 解决方案是调用personality(0x40000)。请参阅下面评论中的详细信息。

ASLR 标志位于 ELF 文件中的什么位置?我需要禁用特定库 (.so) 的 ASLR。我尝试过使用 objdump 但不知道如何操作。

我无法使用 /proc,因为它似乎不适用于我的 Android 4.4.4,因此我尝试修改二进制文件。

编辑: 我已经编译了以下内容:

#include <stdio.h>

void* getEIP()
{
    return __builtin_return_address(0) - 0x5;
}

int main(int argc, char** argv)
{
    printf("EIP located at: %p\n", getEIP());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有 ASLR (PIE):

arm-linux-androideabi-gcc.exe code.c -o noPIE --sysroot=%NDK%\platforms\android-3\arch-arm
Run Code Online (Sandbox Code Playgroud)

与ASLR(PIE):

arm-linux-androideabi-gcc.exe -fPIE -pie code.c -o withPIE --sysroot=%NDK%\platforms\android-3\arch-arm
Run Code Online (Sandbox Code Playgroud)

noPIE 二进制文件确实没有被随机化,尽管:

# cat /proc/sys/kernel/randomize_va_space
2
Run Code Online (Sandbox Code Playgroud)

linux random elf objdump aslr

5
推荐指数
1
解决办法
5954
查看次数

Node js 脚本崩溃:进程已完成,退出代码为 139(被信号 11 中断:SIGSEGV)

我的脚本崩溃并且调试器无法捕获错误。我什至尝试捕获一些功能,但没有成功。

有什么建议如何缩小问题可能出现的范围吗?

该脚本是游戏的测试脚本。对于以前的游戏来说它效果很好,但是对于新游戏来说有一些新的情况。不幸的是我不知道错误在哪里。可能是当从服务器接收到唯一的案例对象时。

该脚本正在针对服务器进行测试并将输出写入控制台或文件。在这两种情况下都会发生错误。

错误:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

编辑:

这是SegfaultHandler输出:

PID 2645 received SIGSEGV for address: 0x0 0 segfault-handler.node 0x00000001034ae1c8 _ZL16segfault_handleriP9__siginfoPv + 280 1 libsystem_platform.dylib 0x00007fff9364b52a _sigtramp + 26 2 ??? 0x0000000000000010 0x0 + 16 3 node 0x000000010067bbdc _ZN2v88internal23Runtime_GetFrameDetailsEiPPNS0_6ObjectEPNS0_7IsolateE + 2364 4 ??? 0x00000a107710961b 0x0 + 11065833330203 5 ??? 0x00000a107795c134 0x0 + 11065842057524

javascript objdump segmentation-fault node.js

5
推荐指数
1
解决办法
2万
查看次数

给定程序计数器,在共享库中查找源代码行

我正在尝试在定制的 ARM 板上调试 Android Surfaceflinger 守护程序中的段错误。该进程在转储调用堆栈和寄存器内容(包括程序计数器)之前崩溃。

通常我会使用 objdump 并搜索程序计数器。问题在于调用堆栈的一部分位于共享库中。如果不使用 gdb,我如何将程序计数器与源文件中的一行关联起来?即是否可以在不运行程序的情况下确定共享库指令的地址?

c++ shared-libraries objdump

5
推荐指数
1
解决办法
4429
查看次数

gcc/objdump 输出在反汇编的 ASM 代码行中包含来自 C 源代码的行

我认为这个问题与其他类似的问题有很大不同。

我的流程大致是这样的:

### Compile
%> gcc -ggdb3 file0.c ... -fno-builtin -c -o file0.o
%> gcc -ggdb3 file1.c ... -fno-builtin -c -o file1.o
...
%> gcc -ggdb3 fileN.c ... -fno-builtin -c -o fileN.o
### Link
%> gcc -ggdb3 -nostdlib -nodefaultlibs -Tscript.lds -Ttext=0x4000000 \
          -Wl,--build-id=none -o main.elf file0.o file1.o ... fileN.o
### Disassemble
%> objdump -Stsxd main.elf > main.dis
Run Code Online (Sandbox Code Playgroud)

我没有看到 . 生成的反汇编文件行之间的 C 代码objdump 请参阅下图的示例。

我不责怪objdump,因为objdump --dwarf=decodedline main.elf什么也没有表现出来。我认为elf 文件没有这些信息。

  • 我一直在尝试添加各种版本的-g-ggdb、 …

c gcc arm objdump

5
推荐指数
1
解决办法
431
查看次数

如何反汇编原始MIPS代码?

类似于我如何反汇编原始x86代码?,但是对于MIPS架构而言:我该如何反汇编原始MIPS代码objdump?我想查看vmlinux映像中的说明,但现在我必须这样做:

: > x.c
mipsel-linux-gnu-gcc -c -o x.o x.c
mipsel-linux-gnu-objcopy --add-section raw=vmlinux x.o
mipsel-linux-gnu-objcopy --remove-section .comment x.o
mipsel-linux-gnu-objdump -D x.o | less
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?我尝试了以下无济于事:

mipsel-linux-gnu-objdump -b elf32-tradlittlemips -mmips -Mgpr-names=O32,cp0-names=mips1,cp0-names=mips1,hwr-names=mips1,reg-names=mips1 -D vmlinux | less
Run Code Online (Sandbox Code Playgroud)

它只是吐出来:

mipsel-linux-gnu-objdump: vmlinux: File format not recognized
Run Code Online (Sandbox Code Playgroud)

如果有帮助,这是一些命令的输出:

$ file x.o
x.o: ELF 32-bit LSB relocatable, MIPS, MIPS-I version 1 (SYSV), with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000, not stripped
$ mipsel-linux-gnu-objdump -p x.o

x.o:     file format elf32-tradlittlemips
private …
Run Code Online (Sandbox Code Playgroud)

linux assembly mips objdump

4
推荐指数
1
解决办法
1万
查看次数

无法在二进制文件中找到.dtors和.ctors

我正在读"黑客"这本书.在这本书中有解释使用的部分.dtors.ctors.

我正在尝试重现本书的一个练习,但在我的可执行文件中,我没有这一部分.起初我认为问题是我正在编译64位,但现在我正在编译32位.dtors并且.ctors仍然没有出现在节表中.这是代码:

#include <stdio.h>
#include <stdlib.h>

static void
miConstructor(void) __attribute__ ((constructor));
static void
miDestructor(void) __attribute__ ((destructor));

int
main(void) {
printf("En main() \n");
return 0;
}

void
miConstructor(void) {
printf("En el constructor\n");
}

void
miDestructor(void) {
    printf("En el destructor\n");
}
Run Code Online (Sandbox Code Playgroud)

我正在编译:

 gcc -m32 -o a.out dtors_example.c
Run Code Online (Sandbox Code Playgroud)

这是nm的输出:

080495f0 d _DYNAMIC
080496e4 d _GLOBAL_OFFSET_TABLE_
080484dc R _IO_stdin_used
     w _ITM_deregisterTMCloneTable
     w _ITM_registerTMCloneTable
     w _Jv_RegisterClasses
080485d8 r __FRAME_END__
080495ec d __JCR_END__
080495ec d __JCR_LIST__
08049704 D …
Run Code Online (Sandbox Code Playgroud)

c constructor destructor objdump nm

4
推荐指数
1
解决办法
5040
查看次数

如何使objdump显示部分汇编只出现在源代码中?

我想生成像这个问题的答案中的组件使用GCC生成可读组件?

对于简单的测试代码:test.c

void main(){
   int i;
   for(i=0;i<10;i++){
   printf("%d\n",i);
   }
} 
Run Code Online (Sandbox Code Playgroud)

gcc命令: gcc -g test.c -o test.o

objdump命令: objdump -d -M intel -S test.o

但我得到的是程序集以.init部分开头, 080482bc<_init>:以.fini部分结束080484cc<_fini>

我不希望他们出现.

为什么会这样?如何避免显示不在源文件中的部分?

c gcc objdump

4
推荐指数
1
解决办法
4941
查看次数

可以在Mac上使用gnu utils如gobjdump解析器Linux ELF二进制文件吗?

所以基本上我在Linux 32位上编译了一些ELF二进制文件.

我想在我的Mac 64位上分析它.

我正在尝试使用自制软件安装的gnu utils gobjdumpgreadelf.

但是,当我尝试使用gobjdump解析elf二进制文件时,我收到此错误:

gobjdump: hello: File format is ambiguous
gobjdump: Matching formats: elf32-i386-nacl elf32-i386-sol2 elf32-i386-vxworks elf32-i386
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 是否有可能使用其gnu工具在MAC上分析32位Linux编译的ELF二进制文件?

  2. 如果可能,该怎么办?

linux macos objdump disassembly

4
推荐指数
1
解决办法
1886
查看次数

为什么objdump为这个汇编语言指令显示一个空操作码?

我有以下汇编代码:

global _start
section .text
_start:

add byte [eax], al
Run Code Online (Sandbox Code Playgroud)

编译和链接后,我尝试看到操作码:

$ objdump -d eax.o

eax.o:     file format elf32-i386


Disassembly of section .text:

00000000 <_start>:
        ...
$
Run Code Online (Sandbox Code Playgroud)

为什么我得到一个空操作码?

x86 assembly opcode objdump disassembly

4
推荐指数
1
解决办法
398
查看次数