簡體   English   中英

如何從程序集傳遞堆棧中某個位置的內存地址?

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

我試圖將堆棧內存地址存儲到寄存器中。 關鍵是從帶有三個參數的匯編代碼中調用c函數。

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

2)一個int:很簡單, movq $2, %rsi

3)指向內存地址的指針:這是棘手的部分。 這個地址可以說是堆棧位置2 = -16(%rsp)

如何將此堆棧位置傳遞到寄存器%rdx並讓c函數將其結果寫入那里?

注意:如果您需要知道,此c函數是pthread線程的。

好的,我做到了,謝謝。 這是完整的解決方案:

匯編代碼:

  1 .globl main
  2 main:
  3
  4 pushq %rbp
  5 movq  %rsp, %rbp
  6 subq  $8, %rsp
  7
  8 movq  $50, -8(%rbp)
  9
 10 leaq  PrintHello(%rip), %rdi
 11 movq  $17,  %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  $8, %rsp
 22 movq  $0, %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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM