objdump 反汇编_so文件反汇编

objdump 反汇编_so文件反汇编objdump反汇编,反汇编与源代码混合显示,C++符号逆向解析。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

objdump反汇编用法示例

原文:http://blog.csdn.net/zoomdy/article/details/50563680
mingdu.zheng at gmail dot com

  • -d:将代码段反汇编
  • -S:将代码段反汇编的同时,将反汇编代码和源代码交替显示,编译时需要给出-g,即需要调试信息。
  • -C:将C++符号名逆向解析。
  • -l:反汇编代码中插入源代码的文件名和行号。
  • -j section:仅反汇编指定的section。可以有多个-j参数来选择多个section。

有代码如下:

class Main
{ 
   
	int a;
public:
	Main()
	{ 
   
		a = 0;
	}

	int getA(void)
	{ 
   
		return this->a;
	}
};

Jetbrains全家桶1年46,售后保障稳定

$objdump -d a.out # 简单反汇编

08048456 <_ZN4MainC1Ev>:
 8048456:	55                   	push   %ebp
 8048457:	89 e5                	mov    %esp,%ebp
 8048459:	8b 45 08             	mov    0x8(%ebp),%eax
 804845c:	c7 00 00 00 00 00    	movl   $0x0,(%eax)
 8048462:	5d                   	pop    %ebp
 8048463:	c3                   	ret    

08048464 <_ZN4Main4getAEv>:
 8048464:	55                   	push   %ebp
 8048465:	89 e5                	mov    %esp,%ebp
 8048467:	8b 45 08             	mov    0x8(%ebp),%eax
 804846a:	8b 00                	mov    (%eax),%eax
 804846c:	5d                   	pop    %ebp
 804846d:	c3                   	ret    

$objdump -S a.out # 反汇编代码中混入对应的源代码

08048456 <_ZN4MainC1Ev>:
class Main
{
	int a;
public:
	Main()
 8048456:	55                   	push   %ebp
 8048457:	89 e5                	mov    %esp,%ebp
	{
		a = 0;
 8048459:	8b 45 08             	mov    0x8(%ebp),%eax
 804845c:	c7 00 00 00 00 00    	movl   $0x0,(%eax)
	}
 8048462:	5d                   	pop    %ebp
 8048463:	c3                   	ret    

08048464 <_ZN4Main4getAEv>:

	int getA(void)
 8048464:	55                   	push   %ebp
 8048465:	89 e5                	mov    %esp,%ebp
	{
		return this->a;
 8048467:	8b 45 08             	mov    0x8(%ebp),%eax
 804846a:	8b 00                	mov    (%eax),%eax
	}
 804846c:	5d                   	pop    %ebp
 804846d:	c3                   	ret    

$objdump -C -S a.out # C++符号名逆向解析

08048456 <Main::Main()>:
class Main
{
	int a;
public:
	Main()
 8048456:	55                   	push   %ebp
 8048457:	89 e5                	mov    %esp,%ebp
	{
		a = 0;
 8048459:	8b 45 08             	mov    0x8(%ebp),%eax
 804845c:	c7 00 00 00 00 00    	movl   $0x0,(%eax)
	}
 8048462:	5d                   	pop    %ebp
 8048463:	c3                   	ret    

08048464 <Main::getA()>:

	int getA(void)
 8048464:	55                   	push   %ebp
 8048465:	89 e5                	mov    %esp,%ebp
	{
		return this->a;
 8048467:	8b 45 08             	mov    0x8(%ebp),%eax
 804846a:	8b 00                	mov    (%eax),%eax
	}
 804846c:	5d                   	pop    %ebp
 804846d:	c3                   	ret    

objdump -j .text -l -C -S a.out # 打印源文件名和行号

08048456 <Main::Main()>:
_ZN4MainC2Ev():
~/objdump/main.h:5
class Main
{
	int a;
public:
	Main()
 8048456:	55                   	push   %ebp
 8048457:	89 e5                	mov    %esp,%ebp
~/objdump/main.h:7
	{
		a = 0;
 8048459:	8b 45 08             	mov    0x8(%ebp),%eax
 804845c:	c7 00 00 00 00 00    	movl   $0x0,(%eax)
~/objdump/main.h:8
	}
 8048462:	5d                   	pop    %ebp
 8048463:	c3                   	ret    

08048464 <Main::getA()>:
_ZN4Main4getAEv():
~/objdump/main.h:10

	int getA(void)
 8048464:	55                   	push   %ebp
 8048465:	89 e5                	mov    %esp,%ebp
~/objdump/main.h:12
	{
		return this->a;
 8048467:	8b 45 08             	mov    0x8(%ebp),%eax
 804846a:	8b 00                	mov    (%eax),%eax
~/objdump/main.h:13
	}
 804846c:	5d                   	pop    %ebp
 804846d:	c3                   	ret    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213528.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dedecms利用memberlist标签调用自定义会员模型的会员信息

    dedecms利用memberlist标签调用自定义会员模型的会员信息

    2021年9月25日
  • TerminateProcess函数简单使用示例[通俗易懂]

    TerminateProcess顾名思义,就是终止进程的意思。是WindowsAPI的函数,示例代码如下://Demo.cpp:定义控制台应用程序的入口点。//终止进程Demo#include”stdafx.h”usingnamespacestd;//@param:dwpid:指定需要关闭的进程pidintCloseProcess(DWORDdwpi…

    2022年4月7日
  • java集合系列——Map介绍(七)

    Map是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    2022年2月26日
  • C-V2X 频点-频段简介[通俗易懂]

    C-V2X 频点-频段简介[通俗易懂]1.缩略语1.Bband频段一个频率的范围或者频谱的宽度2.ULUplink上行链路3.DLDownlink下行链路4.EARFCNE-UTRAAbsoluteRadioFrequencyChannelNumber载波频点号5.FULF_{UL}FUL​FrequencyUplink载频上行频率6.NULN_{UL}NUL​EARFCNUplink载频上行频点号7.FDLF_{DL}FDL​FrequencyDownlink 载频下行频率8.

    2022年9月1日
  • linux 同步IO: sync、fsync与fdatasync

    linux 同步IO: sync、fsync与fdatasync传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayedwrite)(Bach

    2022年5月31日
  • 卷积神经网络的卷积层_卷积神经网络详解

    卷积神经网络的卷积层_卷积神经网络详解模块融合:将一些相邻模块进行融合以提高计算效率,比如conv+relu或者conv+batchnormalization+relu,最常提到的BN融合指的是conv+bn通过计算公式将bn的参数融入到weight中,并生成一个bias;上图详细描述了BN层计算原理以及如何融合卷积层和BN层,这里进行验证:定义三个模型:定义模型1:一层卷积层和一层BN层网络importnumpyasnpimportmathimporttorchimporttorch.nn.

    2022年10月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号