如何从程序集传递堆栈中某个位置的内存地址?
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
我正在尝试将堆栈内存地址存储到寄存器中。重点是从接受三个参数的汇编代码中调用 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