Нуже скрипт(может perl или еще что) который преобразует фришный syscalls.master в нужный формат. Напрмер в syscalls.master - Код (Text): 1 AUE_NULL MSTD { void sys_exit(int rval); } а в результате работы скрипта получаем Код (Text): .macro sys_exit rval pushl \rval # это надо повторить для всех аргументов movl $1,%eax # это там самая 1 из syscalls.master pushl %eax int $0x80 addl $8,%esp # 8= (колич.aрг+1)*4 .endm сам я не силен в шелл скриптах и перле
вот скрипт. если чего не скушает, пиши, поправим. у меня нет фри. пользоваться так # ./conv syscalls.master >syscall.inc или # ./conv <syscalls.master >syscall.inc ---------begin--------- Код (Text): #!/usr/bin/perl -w $macro =<<'END'; .macro %s %s %s movl $%s,%%eax pushl %%eax int $0x80 addl $%s,%%esp .endm END while(<>) { ($no,$proto) = /^\s*(\d+).*{(.*)}/ and ($name) = $proto =~ /\b(\w+)\s*\(/ or next; @args = @pushs = (); while($proto =~ /\b(\w+)\s*?[,)]/g) { push(@args,$1); push(@pushs,"\tpushl\t\\$1"); } printf($macro,$name,join(',',@args),join("\n",@pushs),$no,(@args+1)*4); } __END__ а не лучше просто push $call_no вместо movl $call_no,%eax pushl %eax или какая-то оптимизация?
> а не лучше просто > push $call_no > вместо > movl $call_no,%eax > pushl %eax > или какая-то оптимизация? вопрос снят. я глупость сказал