繁体   English   中英

在宏+ Linux系统调用中定义标签(nasm)

[英]Defining labels in macro + linux system calls (nasm)

我想使用linux系统调用编写一个非常简单的宏:

%macro hello_macro 1
section .rodata 
%%string1: dd "hello: ",0
section .bss
%%string2: resd 1
section .text
;global %%_start1
%%_start1:
mov dword[%%string1],%1 ;mov argument to string

    ;system call write in stdout
mov eax,4
mov ebx,1
mov ecx,dword[%%string1]
mov edx,6
int 80h

    ;same
mov eax,4
mov ebx,1
mov ecx,dword[%%string2]
mov edx,4                    ;it's 4 bytes so I assume it's 4 chars length.
int 80h 

%endmacro

我这样称呼(在.text部分):

hello_macro 0x00613233

问题是它什么也不做(甚至是错误)!

我这样编译(没有makefile):

nasm -f elf -o 2.o 2.s
gcc -o 2 2.o

2.c是文件。 TNX!

我不知道为什么没有出现任何错误,因为您在此行上引用了一个未定义的变量:

mov dword[%%string],%1 ;mov argument to string

假设应该是%%string2

mov dword[%%string2],%1 ;mov argument to string

我可以看到的另一个问题是ecx应该设置为要写入的字符串的地址。 像这样:

mov ecx,%%string1

在当前代码中,您将ecx设置为该字符串的前四个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM