1
austinchou0126 2014-11-06 11:46:12 +08:00 via iPhone
正在学操作系统,不知道回答对不对,大致思路是将中断号写入EAX,然后INT 80
|
2
austinchou0126 2014-11-06 11:47:35 +08:00 via iPhone
就是把syscall的inline汇编展开写进去,具体可以参考linux syscall
|
3
lane0x OP @austinchou0126 我找到一些简单例子,但是对我自己的目标没有什么帮助,只找到read和write.应该是有类似帮助手册的整体命令参数的表,我的目标是这个
|
4
yangff 2014-11-06 12:01:44 +08:00 via Android
关于寄存器的填充看这里: http://man7.org/linux/man-pages/man2/syscall.2.html
syscall有哪些看这里,点进去可以看参数: http://man7.org/linux/man-pages/man2/syscalls.2.html syscall的编号去头文件里面找sys_xxxxx 注意在64位下用syscall,在32位下用sysenter。。int 80可能可以用吧。。 |
5
yangff 2014-11-06 12:02:42 +08:00 via Android
网络上有一些system call table不过都比较旧了(基本都是2.x内核的。。)
|
6
lane0x OP @yangff 比如我想用gettimeofday
msg: .long 1 movl $78,%eax movl $msg,%ebx movl $0,%ecx int $0x80 这样msg里保存了系统时间吗? |
7
lane0x OP .section .rodata
msg: .ascii "Hello, world.\n" .section .text .globl _start _start: movl $2, %eax #调用fork系统调用 int $0x80 movl $4, %eax # system call 系统调用号(sys_write) movl $1, %ebx # file descriptor 参数一:文件描述符(stdout) movl $msg, %ecx # string address 参数二:要显示的字符串 movl $14, %edx # string length 参数三:字符串长度 int $0x80 # 调用内核功能 movl $1, %eax # 系统调用号(sys_exit) movl $0, %ebx # 参数一:退出代码 int $0x80 # 调用内核功能 类似于这种...有人能给个汇编使用系统调用的其他例子吗. 最好是gettimeofday和fork的 |
8
choury 2014-11-06 12:58:41 +08:00 via Android
@lane0x 系统调用这么多,有个例子就行了啊,都一样,自己查个调用号表,其他的就是传的参数不一样,为什么非要这两个呢?
|
11
tabris17 2014-11-06 13:09:15 +08:00
syscall指令
|
13
choury 2014-11-06 14:11:39 +08:00
|
14
wwlzz 2014-11-06 14:15:30 +08:00
|
15
husinhu 2014-11-06 15:23:40 +08:00
for x86, int
for x86-64, syscall for armv7, svc for armv8, svc |
16
lu18887 2014-11-07 00:55:11 +08:00 via iPhone
先写c版本 ,用gcc编译,输出格式选汇编
|
17
dbow 2014-11-07 09:45:51 +08:00
|