我有以下汇编代码
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
leaq .LC0(%rip), %rdi
movl $5, %esi
movl $0, %eax
call printf@PLT
我不想打印出5,而是想打印出当前位置和第一个函数(名为func)之间的空间,我一直在尝试以下操作:
var1:
.long .-func
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
leaq .LC0(%rip), %rdi
movl var1, %esi
movl $0, %eax
call printf@PLT
我试过了
.size var1, .-func
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
leaq .LC0(%rip), %rdi
movl var1, %esi
movl $0, %eax
call printf@PLT
到目前为止,我所做的一切都没有起到作用,任何帮助都将不胜感激。
最佳答案
您的尝试:
var1:
.long .-func
将生成一个值为其与
func
之间距离的对象我理解您的问题,您需要主通话点与func
之间的距离比如说:leaq .LC0(%rip), %rdi
movl $.-func, %esi
movl $0, %eax
call printf@PLT
如果需要,您可以使用
.
中特定指令的标签,而不是main
。.size
指令与您想要的内容无关,尽管它是您可能已经看到过的一个常见用法它的唯一目的是帮助调试/反汇编,使.-symbol
正确地标识地址所属的符号,并且(对于数据)使复制重定位工作。关于c - 如何在GNU汇编器中打印出通过.size指令分配的符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57121389/