call这个指令很神奇,他和别的指令不太一样

对比下,当我们执行
mov eax,1
的时候,他的对应机器码是
66 B8 01 00 00 00
这其中“66 B8”对应的是“mov eax,x”
后面的“01 00 00 00”就是“1”在32位中的Little Endian了
所以说,在对mov指令进行汇编时,里面的常数会被直接汇编成机器码

然而call指令比较有意思
这个是一段很简单的汇编代码
Start:
call @F
@@: pop ebx

 call    @Fnopnopnop
@@:   pop     ebxend  Start

然后通过反汇编后,他变成了这个样子

仔细观察机器码和反汇编代码的对应关系,在汇编代码中,第一行的
call @F
@F: …
被汇编成了机器码
E8 00 00 00 00
欸?“@F”所在地址明明是00401005,为什么没有被汇编成为
E8 05 10 40 00
呢?
再接着看下一个例子,这是汇编代码
call @F
nop
nop
nop
@@: …
被编译器编译后变成了
E8 03 00 00 00
我好像发现了什么,编译器你好坏哦。。。
原来call编译后会把已call所在位置为基址,然后把被call的位置的偏移地址给汇编成字节码
编译器:你写的什么辣鸡玩意,让我来
我:我用od把你编译的东西全改了(:逃
开个玩笑,这个call的“隐藏”作用其实挺大的(大在哪?下次再写),改掉的话就傻*了~况且谁闲的没事改,偏移地址他不香吗(我在说什么,一个功能在这里水了5行)
现在我们把王爽的汇编语言(第3版)翻到第192页,我们看到执行
call 标号
的时候实际上在执行
push eip
jmp 标号
(这段被我改成32位的了,书上是16位)
所以拓展下,jmp的原理和call其实是一样的,这里主要研究call
通过call这个特性,我们可以简单的做到重定位(作用就下一篇再写了)

本文首发于

https://frc6.com/index.php/archives/12/

汇编中call指令和其对应的机器码相关推荐

  1. 汇编中AREA指令的使用

    AREA指令指示汇编程序汇编新的代码节或数据节.节是不可分的已命名独立代码或数据块,它们由链接器处理.有关详细信息,请参阅ELF节和AREA指令. 语法 AREAsectionname{,ATtr}{ ...

  2. arm汇编中mov、movs、movw、movl、movb解析

    arm汇编中mov指令 mov 指令在汇编中表示传送含有 movl mov long : 传送字长 : 32位:把32位立即数放到寄存器 movw mov word:传送字 :16位: 把 16 位立 ...

  3. 汇编中Enter和Leave指令

    Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见 ...

  4. ARM汇编:汇编中proc、endp、ret、near、far指令用法

    ARM汇编:汇编中proc.endp.ret.near.far指令用法 子程序名 PROC NEAR ( 或 FAR ) -- ret 子程序名 ENDP (1)NEAR属性(段内近调用): 调用程序 ...

  5. arm汇编中DCB、DCW、DCD、DCQ指令

    背景 在ida中进行分析so文件,就是elf文件,它所对应的arm汇编,在汇编中会时常碰到一些下面的汇编指令.DCB是arm汇编中的伪指令,下面就针对这个指令相关做下小记录. 伪指令及DC系列指令 A ...

  6. 汇编中的串操作指令(MOVS,CMPS,SCAS,LODS,STOS)

           学汇编的都知道,汇编中很多问题都是对字符串进行的操作,但是我们操作时总是重复相同的操作,用多个指针进行记录,不断判断只针对位置,这样确实很麻烦,于是汇编提供了一种对字符串进行操作的指令, ...

  7. dec-c 怎么改语言,汇编中的dec指令是什么指令

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:汇编中的dec指令是什么指令?回答:相当于c语言中的自减.如:dec R0就是说R0=R0-1.如果R0=5,那么运算过后,R0=4 ...

  8. 汇编中的la_MIPS汇编与指令

    一.MIPS寄存器 MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I.MIPS II.MIPS III.MIPS IV.MIPS V,以及嵌入式指令体系MIPS16. ...

  9. 汇编中的lea指令的作用,简单清晰明了不废话!

    首先看一下intel开发手册上对lea的官方解释: lea,官方解释Load Effective Address,即装入有效地址的意思,它的操作数就是地址: 常见的几种用法: 1.lea eax,[a ...

  10. MIPS介绍与MIPS汇编的常用指令

    描述 CTF做题时会遇见MIPS汇编的题目,而我们接触的是8086汇编,IDA是不能反汇编的需要自己了解一些MIPS方面的知识; 1. List 1 在不同的设备中,汇编语言对应着不同的机器语言指令集 ...

最新文章

  1. 北科大计算机小学期,北京科技大学小学期计算机实践(C++源代码)
  2. ADT启动SDK Manager时一闪而过
  3. 【100题】第十五题(树的镜像问题)
  4. Virtex-6中的GTX模块、GTH模块
  5. install onnx_tensort
  6. java多线程实现端口扫描,使用Java开发多线程端口扫描工具
  7. boost::interprocess::offset_ptr用法的测试程序
  8. Codeforces 1323 div2题解ABC
  9. 传授电脑蓝屏开不了机怎么办
  10. python一个函数调用另一个函数的返回值_在另一个函数中使用返回值
  11. Bootstrap CSS 编程规范之语法规范
  12. python opencv 界面按钮_如何使用Python构建简单的UI?
  13. 蓝桥杯第五届JavaC组杨辉三角问题解决方法
  14. 20191201每日一句
  15. Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结
  16. python动态获取cookie_scrapy爬虫使用Ghost.py动态获取cookie
  17. amend和rebase
  18. 知网html阅读怎么复制粘贴,网页文字不能复制粘贴怎么解决 网页文字不能复制粘贴的解决办法(推荐)...
  19. Maven异常:0.0.1-SNAPSHOT: Could not find artifact
  20. PHP学习笔记(二)——行云博客

热门文章

  1. 用遗传算法解决无线传感器轮值问题(Duty Cycle)
  2. 8.3 Convex combinations (凸组合)
  3. 记一次JAVA ssm+mysql 开发
  4. wds(无线分布式系统)
  5. 双旦七大行业营销活动方案
  6. python win32gui模块详解_Python笔记_第二篇_基本功_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
  7. 汇编语言必看书籍推荐
  8. 基于JAVA健康生活网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  9. Excel 操作 第一篇 行列技巧
  10. 技术漫谈:反病毒技术的现状与未来