Linux上的程序集:程序集的意外行为[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux上的程序集:程序集的意外行为[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
运行下面的代码生成一个Welcome to jj Shashwat
作为内容的文件。我没有得到的是为什么它在文件的末尾写Shashwat
,Shashwat
是一个完全不同的变量。知道为什么会这样吗?
section .text
global _start ;must be declared for using gcc
_start:
;create the file
mov eax, 8
mov ebx, file_name
mov ecx, 0777 ;read, write and execute by all
int 0x80 ;call kernel
mov [fd_out], eax
; close the file
mov eax, 6
mov ebx, [fd_out]
;open the file for reading
mov eax, 5
mov ebx, file_name
mov ecx, 2 ;for read/write access
mov edx, 0777 ;read, write and execute by all
int 0x80
mov [fd_out], eax
; write into the file
mov edx,len ;number of bytes
mov ecx, msg ;message to write
mov ebx, [fd_out] ;file descriptor
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
; close the file
mov eax, 6
mov ebx, [fd_out]
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
file_name db 'myfile.txt', 0
msg db 'Welcome to jj', 0
mgafter db ' Shashwat', 0
lntwo equ $-mgafter
len equ $-msg
section .bss
fd_out resb 1
fd_in resb 1
info resb 26
答案
这是因为你在定义len equ $-msg
和msg
之后你说msgafter
,所以len
设置为msg
和msgafter
的长度,使你的write
调用写两个字符串。这是因为len equ $-msg
的意思是“将len
设置为当前位置($
)与msg
位置之间的差异。”
要解决这个问题,请在len equ $-msg
定义之后移动msg
线。
以上是关于Linux上的程序集:程序集的意外行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章