对我来说,这是一个非常困难的问题。我无法正确读取从python发送到nasmx64的字节。我的代码正在处理整数浮点和其他简单的python对象,但没有处理字节。我正确地转换他们与C语言,但我不能阅读他们一个接一个。 以下是我的部分汇编代码:
SECTION .bss
integer: resb 4
string: resb 8
bytes: resq 1
SECTION .rodata
l_module_name db "asm", 0
parameter_list db "S"
printf_format: db "%i",10,0
SECTION .text
asm_bytes:
push rbp
push rsi
mov rbp, rsp
mov rax, 1
mov rdi, 1
mov rsi, [rsi]
mov rdx, 1
syscall
pop rsi
mov rdi, rsi
mov rsi, parameter_list
mov rdx, bytes
call PyArg_ParseTuple WRT ..plt ;;Here is conversion to C bytes
;;mov rax, 1
;;mov rdi, 1
;;mov rsi, [rdx]
;;add rsi, 48
;;mov rdx, 1
;;syscall
mov rdi, printf_format
mov rsi, [bytes]
xor rax, rax
call printf WRT ..plt ;; Here is a try to print value of bytes[0]
;;mov rdi, printf_format
;;mov rsi, [integer]
;;xor rax, rax
;;call printf WRT ..plt
;;mov rdi, printf_format
;;mov rsi, rdx
;;xor rax, rax
;;call printf WRT ..plt
mov rax, Py_None
inc QWORD [rax + PyObject.ob_refcnt]
pop rbp
ret
编译并使python可见后,我可以在python中使用此函数,下面是python终端代码片段:
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> string = "takie tam"
>>> arr = bytes(string, "utf-8")
>>> import asm
>>> asm.bytes(arr)
-1995689024
>>> arr[0]
116
正如你所看到的,我从这个字节中得到了一些抽象值,我也知道它们被正确地转换了,因为在使用这个方法时,我在python中没有得到任何异常。我不知道这些字节存储在哪里,以便正确读取它们。 我还阅读了pythoncextensions的完整文档,但有人认为转换后的值应该存储在“bytes”变量中。 请帮帮我,因为我对这项工作失去了希望。 是的,正如我之前写的,这只是我汇编代码的一部分,rest纯粹是关于python与c和汇编语言的集成。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐