Joe*_*oey 0 x86 assembly compilation memory-address
如果你编译、链接和运行这样的东西:
global _start
section .text
_start:
jmp message
proc:
...
message:
call proc
msg db " y0u sp34k 1337 ? "
section .data
Run Code Online (Sandbox Code Playgroud)
是的,它们被转换为地址。jmp相对或绝对跳跃或远或近跳跃有不同的指令。汇编器将选择其中之一(例如,最短的)并将助记符 ( jmp) 转换为相应的机器代码。
他们有相对地址。汇编器生成一个目标文件,其中包含可重定位的代码和数据。它可以通过链接器与其他目标文件结合以最终产生可执行文件。最终的可执行文件具有绝对地址1。
不。每个进程都有自己的虚拟地址空间,所以每个进程的第一个地址是0x00. 可执行文件中使用的地址也是虚拟的,因此它们映射到任意物理地址。
此外,显然要求 PC 具有
1从技术上讲,这不是真的。图像可能会在加载时重新定位。