C语言实现反汇编【微机原理】
0.参考文章1.配置gcc (dev c++中MinGW64)2.反汇编3.debug简单分析4.在c代码里内联汇编0.参考文章
gcc不是内部或外部命令,也不是可运行的程序或批处理文件
使用 gcc 命令把C语言程序反汇编
如何在c代码里内联汇编
C语言汇编循环语句
GCC在C语言中内嵌汇编 asm
汇编语言 大小比较 理解 ja jna jg jle
一个C语言源程序是如何到一个可执行程序的
1.配置gcc (dev c++中MinGW64)
path系统变量
新建系统变量:LIBRARY_path
新建系统变量:C_INCLUDE_PATH
cmd测试
2.反汇编
1.c
#include<stdio.h>void main(){int cx=10;int ax=0;int bx=1;while(cx>0){ax+=bx;bx++;cx--;}//printf("%d",ax);//55}
1_at.s
.file"1.c".def__main;.scl2;.type32;.endef.text.globlmain.defmain;.scl2;.type32;.endef.seh_procmainmain:pushq%rbp.seh_pushreg%rbpmovq%rsp, %rbp.seh_setframe%rbp, 0subq$48, %rsp.seh_stackalloc48.seh_endprologuecall__mainmovl$10, -4(%rbp)movl$0, -8(%rbp)movl$1, -12(%rbp)jmp.L2.L3:movl-12(%rbp), %eaxaddl%eax, -8(%rbp)addl$1, -12(%rbp)subl$1, -4(%rbp).L2:cmpl$0, -4(%rbp)jg.L3addq$48, %rsppopq%rbpret.seh_endproc.ident"GCC: (tdm64-1) 4.9.2"
会发现和debug中结果差不多
3.debug简单分析
4.在c代码里内联汇编
一个简单的内联例子
#include<stdio.h>int a;int main(){printf("Test inline asm\n");//__asm("mov $789,%eax");//__asm("mov %eax,a");__asm("mov $789,%eax\n""mov %eax,a\n");printf("A is : %d\n",a);//789return 0;}
纯C语言
#include<stdio.h>void main(){int ax=0;int bx=1;int cx=10;while(bx<=cx){ax+=bx;bx++;}printf("%d",ax);//55printf("%d",bx);//11}
对应C语言内联汇编
#include<stdio.h>void main(){int ax=0,bx=1,cx=10;__asm("mov ax,%eax\n");__asm("mov bx,%ebx\n");__asm("next:\n""cmp cx,%ebx\n ""jg end\n""add %ebx,%eax\n""inc %ebx\n""jmp next\n""end:\n""mov %eax,ax""mov %ebx,bx");printf("%d",ax);//55printf("%d",bx);//11}
如果觉得《C语言实现反汇编【微机原理】》对你有帮助,请点赞、收藏,并留下你的观点哦!