相关疑难解决方法(0)

132
推荐指数
4
解决办法
10万
查看次数

将flags寄存器用作布尔返回值被认为是不好的做法吗?

我正在x86汇编程序中编写一些程序来修改ZF作为返回布尔值的方法,所以我可以这样做:

call is_value_correct
jz not_correct
Run Code Online (Sandbox Code Playgroud)

我想知道这是否被认为是不好的做法,因为一些编码标准说应该在AX寄存器中返回简单的值.

x86 assembly coding-style

5
推荐指数
1
解决办法
402
查看次数

为什么x86-64 Linux系统调用会修改RCX,值是什么意思?

我正在尝试使用sys_brksyscall 在Linux中分配一些内存。这是我尝试过的:

BYTES_TO_ALLOCATE equ 0x08

section .text
    global _start

_start:
    mov rax, 12
    mov rdi, BYTES_TO_ALLOCATE
    syscall

    mov rax, 60
    syscall
Run Code Online (Sandbox Code Playgroud)

事情是按照linux调用约定,我希望返回值在rax寄存器中(指向已分配内存的指针)。我在gdb中运行了此文件,并在进行了sys_brksyscall 后注意到以下寄存器内容

在系统调用之前

rax            0xc      12
rbx            0x0      0
rcx            0x0      0
rdx            0x0      0
rsi            0x0      0
rdi            0x8      8
Run Code Online (Sandbox Code Playgroud)

系统调用后

rax            0x401000 4198400
rbx            0x0      0
rcx            0x40008c 4194444 ; <---- What does this value mean?
rdx            0x0      0
rsi            0x0      0
rdi            0x8      8
Run Code Online (Sandbox Code Playgroud)

rcx在这种情况下,我不太了解寄存器中的值。哪个指针可以用作我分配给它的8个字节的开头的指针sys_brk

linux assembly x86-64 system-calls

4
推荐指数
1
解决办法
1229
查看次数

汇编中(进位标志)和系统调用之间的关系是什么(Mac Os 上的 x64 Intel 语法)?

我是新来的汇编语言,我必须做出的实现读取用汇编语言功能x64MAC。到目前为止,这就是我所做的:

;;;;;;ft_read.s;;;;;;

global _ft_read:
section .text
extern ___error

_ft_read:
    mov rax, 0x2000003 ; store syscall value of read on rax 
    syscall            ; call read and pass to it rdi , rsi, rdx  ==> rax read(rdi, rsi, rdx)
    cmp rax, 103       ; compare rax with 103 by subtracting 103 from rax ==> rax - 103
    jl _ft_read_error  ; if the result of cmp is less than 0 then jump to _ft_read_error
    ret                ; else return …
Run Code Online (Sandbox Code Playgroud)

c macos assembly errno system-calls

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

标签 统计

assembly ×4

linux ×2

system-calls ×2

x86-64 ×2

abi ×1

c ×1

coding-style ×1

errno ×1

macos ×1

unix ×1

x86 ×1