社区讨论

x86汇编,0分求调

B2002Hello,World!参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mlpju2n5
此快照首次捕获于
2026/02/17 03:10
3 天前
此快照最后确认于
2026/02/17 20:32
前天
查看原帖
问题描述:如果我使用int 0x80软中断的方式执行系统调用,它正确的输出了结果
C
int main(){
    const char* p="Hello,World!";
    __asm__("mov $4, %%eax\n\t"
       "mov $1, %%ebx\n\t"
        "mov $12, %%edx\n\t"
       "int $0x80"::"c"(p));
}
但是当我使用64位Linux的syscall指令执行系统调用,它WA了
C
int main(){
    const char* p="Hello,World!";
    __asm__ __volatile__("mov $1, %%rax\n\t"
       "mov $1, %%rdi\n\t"
        "mov %0, %%rsi\n\t"
        "mov $12, %%rdx\n\t"
       "syscall"::"r"(p));
}
我并没有搞错系统调用编号,也正确的传递了参数,求助一下

回复

2 条回复,欢迎继续交流。

正在加载回复...