相关疑难解决方法(0)

学习汇编-回显程序名

我正在尝试用汇编编写一个简单的程序,它将写出程序的名称。使用 gdb 进行调试,我确定对 sys_write 的调用返回 -14 (EFAULT)。我还能够验证我的 strlen 函数是否正常工作。似乎存在某种内存访问问题,但鉴于 strlen 正在访问相同的内存并且工作正常,我不明白可能有什么问题。出了什么问题?

谢谢!

完整代码:

section .text
    global _start

_start:
    mov rax, [rsp+8]
    push rax
    call strlen
    add rsp, 8

    mov rdx, rax ; bytes to write
    mov rax, 4 ; sys_write
    mov rbx, 1 ; stdout
    mov rcx, [rsp+8] ; addr of string
    int 0x80

    ; exit
    mov rax, 1
    mov rbx, 0
    int 0x80

strlen:
    mov rax, 0
    mov rbx, [rsp+8]
strlen_loop:
    cmp byte [rbx+rax], 0
    je strlen_end
    inc rax …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64

3
推荐指数
1
解决办法
4151
查看次数

NASM程序集将输入转换为整数?

好吧,所以我对组装很新,事实上,我对组装很新.我写了一段代码,它只是意味着从用户那里获取数字输入,乘以10,并通过程序退出状态将结果表示给用户(通过在终端中输入echo $?)问题是,它是没有给出正确的数字,4x10显示为144.所以我认为输入可能是一个字符,而不是一个整数.我的问题是,如何将字符输入转换为整数,以便它可以用于算术计算?

如果有人能够回答我记得我是初学者,那将是很棒的:)另外,我怎样才能将所述整数转换回字符?

section .data

section .bss
input resb 4

section .text

global _start
_start:

mov eax, 3
mov ebx, 0
mov ecx, input
mov edx, 4
int 0x80

mov ebx, 10
imul ebx, ecx

mov eax, 1
int 0x80
Run Code Online (Sandbox Code Playgroud)

int x86 assembly nasm char

3
推荐指数
2
解决办法
2万
查看次数

标签 统计

assembly ×2

char ×1

int ×1

nasm ×1

x86 ×1

x86-64 ×1