我认为“调用”指令是一种“跳转”指令。 “跳转”指令有地址去哪里。 而“call”指令应该有一个目标地址。 但是,当我拆解二进制文件时,“call”指令只具有目标函数的标签。那么,他们如何知道去哪里?换句话说,我在哪里可以找到每个函数的目标地址? x86,ARM不管。“调用”指令位置的地址
-1
A
回答
2
汇编程序设计中的地址通常标有一些符号名称。这不仅适用于通话指示,而且适用于所有其他指示。
这种方法有一个原因 - 地址总是取决于程序在内存中的加载位置。此外,某些指令不包含地址本身,而是包含相对于执行程序的当前地址的偏移量。
另一方面,程序员通常不关心地址的确切值。他只想知道这个地址的位置。这就是使用符号标签的原因。
使用具有有意义名称的符号标签可以提高源代码的可读性并使程序易于支持和扩展。
这些符号地址(标签)在将源代码组装到可执行二进制文件期间被转换为数字。
根据可执行的格式,有时翻译是部分的 - 只计算相对于代码开头的偏移量。这些都是所谓的“可重新定位”标签。
稍后,当操作系统将二进制文件加载到内存中的某个特定地址时,所有可重定位地址都将被固定,以便获取加载二进制文件的正确数值。
这种方法对于动态加载库(DLL)很常见,因为每次将库加载到内存中时,加载地址都是未知的(并且是不同的)。
相关问题
- 1. C指令地址
- 2. 地址位置
- 3. 地址和地理位置地址
- 4. IP地址位置
- 5. NGINX位置指令相同的位置
- 6. 指针中的哪个位置地址引用
- 7. 使用位置指令时没有网址更改
- 8. 尝试使用地理位置打印当前位置地址
- 9. 获取C/C++指令的地址
- 10. 计算JMP指令的地址
- 11. 地址或位置标识
- 12. 调用完成后指针指向的位置返回被破坏的变量的地址?
- 13. nginx别名+位置指令
- 14. 如何指定axis2-java2wsdl-maven-plugin中的地址位置?
- 15. 确定86 MONITOR指令地址范围
- 16. AVX2指令集 - 加载地址计算
- 17. html5地理位置和地址
- 18. PHP/NuSOAP设置肥皂:地址位置
- 19. nginx的:未知的指令 “位置”
- 20. 从我的位置获取地址android
- 21. IP地址的位置检测技术
- 22. 获取某个位置的地址
- 23. 登录到LogCat的位置地址
- 24. 从您ping的位置更改IP地址的位置
- 25. 如何从核心位置返回的位置检索地址
- 26. 如何使用Google API获取IP地址的地理位置?
- 27. 用户地理位置到最近的地址计算
- 28. 设置地址并初始化指针
- 29. 指出谷歌地图中的位置
- 30. 奇怪的指令调用
_“但是当我拆开二进制文件时,”call“指令只有目标函数的标签。”_这是反汇编程序为了让拆卸更容易阅读而做的。 “call”指令的实际机器码序列将包含目标地址(可以是相对或绝对的)。 – Michael 2015-04-01 15:06:11
你应该看到没有什么区别,反汇编跳转或呼叫。 – Jester 2015-04-01 15:06:41
为什么不在拆解和询问这些问题之前阅读一些书 – 2015-04-01 15:53:57