如何从程序集传递堆栈中某个位置的内存地址?

How to pass memory address of a location in Stack from assembly?

我正在尝试将堆栈内存地址存储到寄存器中。重点是从接受三个参数的汇编代码中调用 c 函数。

1) 指向函数的指针:我使用 leaq label(%rip), %rdi

2) 一个整数:很简单,movq , %rsi

3) 指向内存地址的指针:这是棘手的部分。这个地址可以说是堆栈位置 2 = -16(%rsp).

如何将此堆栈位置传递到寄存器 %rdx 并让 c 函数将其结果写入那里?

注意:如果您需要了解,此 c 函数是 pthread 线程化的。

好的,我做到了,谢谢。这是完整的解决方案:

汇编代码:

  1 .globl main
  2 main:
  3
  4 pushq %rbp
  5 movq  %rsp, %rbp
  6 subq  , %rsp
  7
  8 movq  , -8(%rbp)
  9
 10 leaq  PrintHello(%rip), %rdi
 11 movq  ,  %rsi
 12 leaq  -8(%rbp), %rdx
 13
 14 callq dispatcher
 15 callq wait
 16
 17 movq  -8(%rbp), %rax
 18 movq  %rax, %rdi
 19 callq print_int
 20
 21 addq  , %rsp
 22 movq  [=10=], %rax
 23 popq  %rbp
 24 retq

输出:

In dispatcher arg = 17
In wait
wrap_func: args_data.ret = 50
Hello World! It's me, thread # 17!
wrap_func: after assignment-> args_data.ret = 20
Exit from wait