关于GCC扩展ASM有无数问题,但似乎没有人能够解决我的问题。我正在尝试编写一个简单的代码块来触发对open
的系统调用。我想出了以下内容:
int fd;
char file[] = "/path/to/file";
asm volatile ("int $0x80"
: "=a"(fd)
: "0"(__SYS_open), "D"(file), "S"(O_RDONLY)
: "cc","%edi","%esi");
尝试编译包含上述asm
引用的代码会导致:
error: ‘asm’ operand has impossible constraints
我注意到从clobber列表中删除"%edi","%esi"
允许代码编译而不会出错。我可以在clobber列表中包含我没有在约束中明确请求的寄存器(例如ecx
),所以也许我误解了clobber列表。
将执行此代码的二进制文件是x86_64。