机器汇编和反汇编&指针、结构的尺寸(对齐)

机器汇编和反汇编

调用编译器产生汇编语言mstore.s:

gcc -Og -S mstore.c

调用汇编器产生二进制文件mstore.o:

gcc -Og -c mstore.c

反汇编:

objdump -d mstore.o

编译生成二进制可执行文件prog:

gcc -Og -o prog main.c mstore.c

反汇编:

objdump -d prog

 

mstore.c

long mult2(long,long);

void multstore(long x,long y,long *dest){
   long t=mult2(x,y);
   *dest=t;
}

mstore.s

	.file	"mstore.c"
	.text
	.globl	multstore
	.type	multstore, @function
multstore:
.LFB0:
	.cfi_startproc
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdx, %rbx
	call	mult2@PLT
	movq	%rax, (%rbx)
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE0:
	.size	multstore, .-multstore
	.ident	"GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"
	.section	.note.GNU-stack,"",@progbits

二进制文件mstore.o不可查看

反汇编mstore.o:

0000000000000000 <multstore>:
   0:	53                   	push   %rbx
   1:	48 89 d3             	mov    %rdx,%rbx
   4:	e8 00 00 00 00       	callq  9 <multstore+0x9>
   9:	48 89 03             	mov    %rax,(%rbx)
   c:	5b                   	pop    %rbx
   d:	c3                   	retq  

要生成可执行代码需要一组目标代码文件.o运行链接器,而这组目标代码文件中必须包含一个main函数

main函数:

#include<stdio.h>

void multstore(long x,long y,long *dest);

int main(){
  long d;
  multstore(2,3,&d);
  printf("2 * 3 --> %ld\n",d);
  return 0;
}

long mult2(long a,long b){
  long s= a*b;
  return s;
}

 

指针、结构的尺寸(对齐)

#include<stdio.h>

struct A{
	char c;
	int b;
	char a;
}; 

struct B{
	char c;
	char a;
	int b;
}; 

struct C{
	int b;
	char a;
	char c;
}; 

int main(){
	int (*A1)[3];
	int *A2[3];
	printf("%d %d %d \n",sizeof(A1),sizeof(*A1),sizeof(**A1)); //8 12 4
	printf("%d %d %d \n",sizeof(A2),sizeof(*A2),sizeof(**A2)); //24 8 4
	printf("%d %d %d \n",sizeof(A),sizeof(B),sizeof(C)); //12 8 8
	
	return 0;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
By:美夜赤月 本软件 的 ⑨大亮点 1.自动检测错误代码 2.支持定义参数跟变量 3.支持伪指令跟SSE指令 4.支持反汇编器支持标号 5.支持中文汇编指令转换 6.支持反汇编API名称还原 7.支持汇编代码的高亮跟自动完成 8.可以直接汇编带有API函数的语句 9.支持x64指令集的汇编以及反汇编 1.理论上是支持 直接call api地址的 但是在代码里,请自行取出API的指针然后再call指针 2.反汇编的时候 如果 指针跟某API的名字相同 该地址将会显示成API的名字 3.支持if 等的高级伪指令,不过得开启MASM引擎 4.反汇编的时候可以自动识别 跳转标识符,这样就方便看 跳转跳到了哪里当然,写汇编的时候也支持 跳转标识符。 5.支持x64指令集的汇编输出 6.支持x64指令集的反汇编输出 7.支持明文申请变量/参数 以及快速插入 Arg.x/local.x 抛弃麻烦的计算[ebp+-n] 8.精确定位错误位置以及输出错误信息 9.采用ChasseAsm/NASM/MASM 三重引擎 更新日志 AsmToE Ver 5.5.0 (2018-10-10) 增加 1.支持非跳转语句的标识符还原 2.可添加EIP地址 3.添加NASM引擎 修复 1.去掉了虚拟机检测 2.勾选x64的情况下转x86机器码无限卡死的Bug 3.汇编内数值转换的Bug 4.地址对齐的Bug 5.对0x数值的处理 由于是易语言开发的程序,个别杀软可能会提示为病毒软件 如果不信任的朋友,可以将该软件删除即可,谢谢合作。 _(:з」∠)_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值