0
我想加載一個字符數組地址作爲系統調用參數,它的原型應該是SYSENTER與字符數組裝載
asmlinkage long sys_mknod(const char __user *filename, int mode, unsigned dev);
所以我寫了下面的代碼:
char filepath[] = "/usr/whatever/filepath";
mode_t mode = ...
dev_t dev = ...
..
..
asm volatile(" movq $133, %rax "); // System call number (64 bit)
asm volatile (" leaq path(%rip), %rdi ");
asm volatile(" movq mode, %rsi ");
asm volatile(" movq dev, %rdx ");
asm volatile(" syscall ");
我m不是很習慣AT語法,也不是64位編程,我認爲地址加載是正確的,但代碼不斷崩潰整個系統。
它有什麼問題?
我想你是對的,如果你想保持在內核模式下,有很多工作可以重新實現用戶 - >內核模式之間的轉換 – paulAl 2012-03-19 18:01:11