作者hikaru06 (if(Ithink) exist; )
看板ASM
标题Re: [问题] open
时间Tue Aug 28 22:31:31 2007
※ [本文转录自 C_and_CPP 看板]
作者: hikaru06 (if(Ithink) exist; ) 看板: C_and_CPP
标题: Re: [问题] open
时间: Tue Aug 28 22:16:23 2007
※ 引述《erspicu (lpo)》之铭言:
: fd = open(*filename, O_RDWR | O_BINARY | O_CREAT, 0444);
: 对这个open参数还不是非常了解,不知道能不能以 fopen 来替代?
: 因为我在编译的时候显示O_BINARY没有定义(找寻过,是定义在fcntl.h里面,也include了)
: ,我直接把它给移除掉,不知道有没有什麽不良影响
: (arm-eabi的io读写好像都一律视同binrary模式),因为是以arm-eabi工具来编译,
: 可能是条件比较特殊还是怎样,原因还在追...
: 是想问说能不能以 fd = fopen ("xxx","wb") 来替代 ?
handle_t open(const char *name, int flags, ...)
{
return syscall(SYSCALL_OPEN, (void *) &name);
}
handke_t type 为int
因此用法跟 fopen 大不同唷~~ 可以去看一下fopen 的写法
光是return value (FILE *) 以及功能都有差异
open return 为一个int
至於 syscall的运作 我看不懂想请教会asm的大大
到底是什麽神圣return 呢
__declspec(naked) int syscall(int syscallno, void *params)
{
__asm
{
mov eax, dword ptr ds:[PEB_ADDRESS + 4]
test eax, eax
jz slow_syscall
push ebp
mov ebp, esp
mov eax, 8[ebp]
mov edx, 12[ebp]
mov ecx, offset sys_return
sysenter
sys_return:
pop ebp
ret
slow_syscall:
push ebp
mov ebp, esp
mov eax, 8[ebp]
mov edx, 12[ebp]
int 48
leave
ret
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.64.174.93
1F:→ hikaru06:请会asm的大大帮我看一下原文的syscall 在干嘛..thanks 08/28 22:25
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.64.174.93