[英]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.