相关疑难解决方法(0)

Printf在装配时没有换行符

我最近阅读了有关在汇编中使用printf和scanf的这篇文章:

intfmt的含义:db"%d",10在程序集中

特别是它说"在printf中,换行符打印换行符然后(如果输出处于行缓冲模式,它可能是),刷新内部输出缓冲区,以便您可以实际看到结果.所以当你删除10 ,没有同花顺,你看不到输出."

但是,如果我在汇编文件中输出后不想要换行,我不知道该怎么办.这是一个简单的测试文件,我写的是尝试打印而没有换行:

extern printf


LINUX        equ     80H      ; interupt number for entering Linux kernel
EXIT         equ     60       ; Linux system call 1 i.e. exit ()




section .data
    int_output_format: db "%ld", 0


segment .text
    global  main


main:
    mov r8, 10
    push rdi
    push rsi
    push r10
    push r9
    mov rsi, r8
    mov rdi, int_output_format
    xor rax, rax
    call printf
    pop r9
    pop r10
    pop rsi
    pop rdi
    call os_return      ; return to operating system


os_return:
    mov  rax, EXIT …
Run Code Online (Sandbox Code Playgroud)

c assembly printf newline nasm

6
推荐指数
1
解决办法
2654
查看次数

Syscall实现exit()

我写了一个简单的C程序,只调用exit()函数,但是strace说二进制文件实际上是调用exit_group,exit()是一个exit_group()包装器吗?这两个功能是否相同?如果是这样,为什么编译器会选择exit_group()而不是exit()?

c x86 assembly gcc system-calls

6
推荐指数
1
解决办法
2300
查看次数

Nasm分割错误

对不起,我是汇编代码的新手.我编码这个线条

section .text
     global _start
_start:
     nop
main:
     mov eax, 1
     mov ebx, 2
     xor eax, eax
     ret
Run Code Online (Sandbox Code Playgroud)

我用这些命令编译:

nasm -f elf main.asm
ld -melf_i386 -o main main.o
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,Linux抛出了分段错误错误(我正在使用Linux Mint Nadia 64位).为什么会产生这个错误?

提前致谢

linux x86 assembly nasm

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

标签 统计

assembly ×3

c ×2

nasm ×2

x86 ×2

gcc ×1

linux ×1

newline ×1

printf ×1

system-calls ×1