网站seo工具百度怎么发自己的小广告
web/
2025/9/30 7:46:35/
文章来源:
网站seo工具,百度怎么发自己的小广告,建设项目一次公示网站,咸宁响应式网站建设价格文章目录 1 IDA是什么#xff1f;2 IDA界面3 汇编基础4 IDA查看hello world二进制5 查看带有条件语句和函数调用的二进制6 总结 1 IDA是什么#xff1f;
IDA是一款反编译软件#xff0c;可以查看二进制的汇编代码#xff0c;常用于逆向和问题定位。与其他商业软件类似2 IDA界面3 汇编基础4 IDA查看hello world二进制5 查看带有条件语句和函数调用的二进制6 总结 1 IDA是什么
IDA是一款反编译软件可以查看二进制的汇编代码常用于逆向和问题定位。与其他商业软件类似IDA也提供了很多类型的版本基础的用法可以使用IDA Free。本文会简单介绍下IDA的基本用法。
2 IDA界面 最上面是功能菜单和快捷按钮在快捷按钮下方有彩色的条带色块不同的颜色表示不同的段例如浅黄色是数据段黄色是代码段当选中某行代码时就会在该位置显示小的绿色箭头主界面的左侧是函数列表右侧显示汇编代码最下面就是输出窗口例如对文件进行分析是否成功
3 汇编基础
按照汇编指令的风格主要分成两种
Intel汇编x86架构汇编语言中使用的风格被Windows平台采用ATT汇编x64架构汇编语言中使用的风格被Linux平台采用
两种汇编语言一个比较大区别就是操作数的顺序Intel汇编的源操作数在右边目的操作数在左边而ATT则刚好相反。
每条汇编指令包含两个部分操作码和操作数有的指令只有一个操作数有的指令有多个操作数。
常用的操作码(不同的汇编的操作码的名称有小的差别)
move将数据从一个位置移动到另一个位置两个位置就是两个操作数load/store将数据加载到寄存器/将数据从寄存器保存到内存cmp比较两个操作数并设置比较结果testjmp/je/jz/jne/jnz/jg跳转可以直接跳转也可以根据前一条的比较结果进行跳转call函数调用ret函数返回push/pop将数据压栈/出栈
操作数的类型
立即数常量值寄存器如rax内存地址使用基址、变址、相对寻址的方式指定内存地址标签用于跳转类指令字符串常量用于表示代码中的字符串常量
4 IDA查看hello world二进制 上述截图是代码段的起始部分_start函数是一个特殊的函数表示代码程序的入口点在_start函数的最后调用了main函数call cs:__libc_start_main_ptrcall指令用于调用函数cs是代码段的基址寄存器其中保存着代码段的基地址__libc_start_main_ptr是一个特殊的符号由libc定义指向一个函数指针该函数会执行一系列的初始化工作然后再调用我们的main函数。 main proc和main endp用于定义main函数。
rbp和rsp结合起来实现对函数的调用其中rbp是Base Pointer寄存器函数调用过程中保存的是帧的基地址。rsp是Stack Pointer寄存器堆栈指针寄存器始终指向当前线程的堆栈顶部。在函数内部的指令执行时rbp不变如果使用了函数级别的变量则rsp会更新。
任何函数调用的开头两行指令通常是
push rbp将当前的rbp保存到栈中当前的rbp保存的是上一个函数的基地址mov rbp, rsp将栈地址保存到帧寄存器
此时rbprsp而rbp1(栈是向低地址增长的)的位置处保存的是上一个函数的基地址。
任何函数调用的结尾两行指令通常是
pop rbp将栈顶的值保存到rbp此处栈顶的值就是上一个函数的基地址retn函数返回与call指令相对应
去掉main函数中与函数调用相关的指令剩下的4条指令为
lea rax, ss是hello world字符串的地址lea质量将字符串的地址放到rax寄存器中mov rdi, rax将刚才得到的字符串的地址放到rdi中该寄存器是函数调用的第一个参数call _puts调用_puts函数输出字符串mov eax, 0将eax寄存器设置为0该寄存器作为函数的返回值此处就是main函数的返回值
如果直接在linux中使用objdump查看二进制看到的汇编代码如下 前面也说过Linux采用的是ATT格式的汇编源操作数在右边而windows上的则相反另一个区别就是寄存器名称ATT的前面带有%而Intel汇编则没有除了这些使用objdump得到的汇编代码和IDA一样。
5 查看带有条件语句和函数调用的二进制
在查看某个函数的调用关系时按下空格键可以切换到图形显示方式。 main函数跟hello world的差别不大唯一就是在调用func1时通过esi和edi传递了两个参数。 func1函数的开始部分就是获取两个参数通过一系列mov操作两个参数放到了帧的顶部和edx/eax中然后调用_printf函数使用cmp指令比较第一个参数和0实用jnz判断比较的结果左边的红色的分支表示jnz判断失败右边绿色的分支表示jnz判断成功因此当第一个参数不为0时就执行右边当参数为0时就执行左边分支执行完成后两个分支都会沿着蓝色的流程继续执行调用func2然后将func2的结果保存到第一个变量然后函数结束。
IDA将整个执行流程以框图的形式展示当其中有分支时通过绿色和红色的分支线表示判断成功和失败的执行流蓝色的线表示顺序的执行流。在了解这种用法后遇到复杂的调用可以直接跳过某些流程直接定位到要查看的代码的附近。
6 总结
IDA是一款可以查看二进制的汇编级别代码的工具并且提供了图形的方式展示程序的执行流程有时候可以用来定位汇编级别的代码崩溃问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84336.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!