Ale*_*ria 2 linux x86 assembly nasm
section.text:
global _start
_start:
mov ebx, 1
mov eax, 4
mov ecx, msg1
mov edx, len1
int 0x80
mov eax, 1 ; exit
mov ebx, 0
int 0x80
section.data:
msg1: db "Hello world", 10
msg2: db "Hello world!", 10
len1: equ $-msg1
len2: equ $-msg2
Run Code Online (Sandbox Code Playgroud)
它打印出: 你好世界你好世界!但为什么是msg2?
len1填充错误,应该是:
section .rodata ; space needed between section directive and its operand
; On Linux we normally put read-only data in .rodata
msg1: db "Hello world", 10
len1: equ $-msg1
msg2: db "Hello world!", 10
len2: equ $-msg2
Run Code Online (Sandbox Code Playgroud)
当前地址 ( ) 和 的地址len1之间的差异也是如此。这样它将是第一条消息的长度。$msg1
请参阅$ 在 NASM 中到底是如何工作的?了解更多详细信息和示例。
请注意,这section.data:只是一个定义符号名称的标签,中间有一个点。它不会切换部分,因此您的代码和数据位于该.text部分(具有只读+执行权限),这是文件顶部用于nasm -f elf32输出的默认部分。
section .data如果您想在没有 exec 的情况下进行读+写,或者section .rodata在 Linux 上如果您想在没有exec 的情况下进行只读,请使用此选项,其中编译器将字符串文字和其他常量将它们与代码分开分组。
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |