这是我的汇编级代码...
section .text
global _start
_start mov eax, 4
mov ebx, 1
mov ecx, mesg
mov edx, size
int 0x80
exit: mov eax, 1
int 0x80
section .data
mesg db 'KingKong',0xa
size equ $-mesg
Run Code Online (Sandbox Code Playgroud)
输出:
root@bt:~/Arena# nasm -f elf a.asm -o a.o
root@bt:~/Arena# ld -o out a.o
root@bt:~/Arena# ./out
KingKong
Run Code Online (Sandbox Code Playgroud)
行中的$是多少size equ $-mesg。有人请解释一下所用$符号...
$指示组装程序进行时的“当前位置”。在这种情况下,它用于存储mesg字符串的长度。
size equ $-msg
Run Code Online (Sandbox Code Playgroud)
说“制作一个标签size并将其设置为等于当前位置减去mesg标签的位置”。由于“当前位置”位于字符串“ KingKong \ n”的末尾,size因此设置为该长度(9个字符)。
从文档中:
NASM在表达式中支持两个特殊标记,允许计算涉及当前程序集的位置:
$和$$标记。$求值到包含表达式的行的开头处的汇编位置;因此您可以使用编写无限循环JMP $。$$计算到当前部分的开头;因此您可以使用来告诉您该部分有多远($-$$)。
| 归档时间: |
|
| 查看次数: |
1072 次 |
| 最近记录: |