【问题标题】:How to set color when calling printf in assembly在汇编中调用printf时如何设置颜色
【发布时间】:2016-07-04 16:04:09
【问题描述】:

当我从程序集中调用printf 时,我想设置颜色。

这是我的代码:

Out:    
    mov     rdi, answer
    mov     rsi, r10
    mov     rax,0
    call    printf
section .data
    answer:     db       "\033[0;31m%d\033[0m",10,0

我使用 NASM 编译和 gcc 链接:

nasm -f elf64 "%f"
gcc -o %e %e.o

但是,输出是:

\033[0;31m(my r10)\033[0m

【问题讨论】:

  • 谢谢 MikeCAT!警告其他人,使用 `not '
  • 这里没有什么神奇的事情发生。您可以使用 db 0o33, "[0;31m%d", 0o33, "[0m", 10, 0 将不可打印字符放入您的 .rodata 部分,就像使用十进制 10 获取换行符和使用 0 获取终止字节一样。 (八进制 0o33 是十进制的 27;你可以用任何 NASM 支持的方式来写)。

标签: linux assembly printf nasm x86-64


【解决方案1】:

使用` 包围字符串以使转义序列在 NASM 中起作用。

参考:3.4.2 Character Strings

试试这个:

Out:
    mov     rdi, answer
    mov     rsi, r10
    mov     rax,0
    call    printf
section .data
    answer:     db       `\033[0;31m%d\033[0m`,10,0

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多