SlideShare a Scribd company logo
@takarakasai
スタート低レイヤー6 #start_printf
今回やるところ
←ここやります!
対象はNetBSD 6.0.1 だよ!
int命令どこ?
 src/lib/libc/arch/i386/SYS.h 75~
#define OSYSTRAP(x) ¥
movl _SYSNAM(x),%eax ;¥
int $0x80
 int と 0x80 でgrepするとこれが出てくるけど…
libc の Makefile.inc から追う
 lib/libc/sys/Makefile.inc 167~
ASMDEPS= ${.CURDIR}/sys/Makefile.inc ${ARCHDIR}/SYS.h ¥
${DESTDIR}/usr/include/sys/syscall.h
…
${WEAKASM}: ${ASMDEPS}
${_MKTARGET_CREATE}
printf '#include
"SYS.h"¥nWSYSCALL(${.PREFIX},_sys_${.PREFIX})¥nWEAK_ALIAS(_${.PREFIX},_sys_${.PREFIX})¥n'
>${.TARGET}
…
WEAKASM= accept.S __aio_suspend50.S close.S connect.S execve.S ¥
…
__wait450.S write.S writev.S
 write.S は./sys/Makefile.inc, i386/SYS.h,
$DEST/usr/include/sys/syscall.h から生成される.
 printf で${.TARGET} = write.S が作成される.
展開してみる
 lib/libc/sys/Makefile.inc
printf '#include
"SYS.h"¥nWSYSCALL(${.PREFIX},_sys_${.PREFIX})¥nWEAK_ALIAS(_${.PREFIX},_sys_${.PREFIX})¥n'
>${.TARGET}
 WSYSCALL, WEAK_ALIAS ?
#include “SYS.h”
WSYSCALL(${.PREFIX},_sys_${.PREFIX})
WEAK_ALIAS(_${.PREFIX},_sys_${.PREFIX})
 ${.TARGET}
#include “SYS.h”
WSYSCALL(write,_sys_write)
WEAK_ALIAS(_write,_sys_write)
 write.S
WSYSCALL, WEAK_ALIAS
 sys/arch/i386/include/asm.h 195-
#define WEAK_ALIAS(alias,sym) ¥
.weak alias; ¥
alias = sym
#endif
#include “SYS.h”
.weak write
alias = _sys_write
PSEDO(_sys_write, write)
.weak _write
alias = _sys_write
 write.S
 sys/arch/i386/include/asm.h 195-
#define WSYSCALL(weak,strong) ¥
WEAK_ALIAS(weak,strong); ¥
PSEUDO(strong,weak)
さらに展開
#include “SYS.h”
.weak write
alias = _sys_write
ENTRY(_sys_write);
SYSTRAP(wirte) >> #define SYSTRAP(x) OSYSTRAP(x)
jc 2f;
ret;
2: _SYSCALL_ERR
.weak _write
alias = _sys_write
 write.S
さらにさらに展開
#include “SYS.h”
.weak write
alias = _sys_write
ENTRY(_sys_write);
movl $(SYS_write),%eax ;
int $0x80
jc 2f;
ret;
2: _SYSCALL_ERR
.weak _write
alias = _sys_write
 write.S
#define SYS_write 4
 sys/sys/syscall.h:28
 eax に システムコール番号入れて int 0x80 よんでる!
さらにさらにさらに展開
#include “SYS.h”
.weak write
alias = _sys_write
.text: _ALIGN_TEXT; .globl _sys_write; .type _sys_write; @function: _sys_write:
movl $(SYS_write),%eax ;
int $0x80
jc 2f;
ret;
2: jmp __cerror // cの関数
.weak _write
alias = _sys_write
 write.S
 weak シンボル( write, _write)
 global / text シンボル( _sys_write)
 Undefined シンボル (__cerror)
がnetbsd の libc.a にある?
ほんとにあってる?
>> nm libc.a
…
write.o:
U __cerror
00000000 T _sys_write
00000000 W _write
00000000 W write
…
 write.S
 あってるようです

More Related Content

PDF
New Generation Build System "Fly"
PDF
System select hint_for_h2
PDF
Chiba.pm #1 lt @studio3104
PDF
もにかじ2 lt @studio3104
PPTX
俺と JAWS-UG と CLI
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
PDF
What is Metasepi?
PDF
知って得する標準関数の使い方
New Generation Build System "Fly"
System select hint_for_h2
Chiba.pm #1 lt @studio3104
もにかじ2 lt @studio3104
俺と JAWS-UG と CLI
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
What is Metasepi?
知って得する標準関数の使い方

What's hot (20)

ODP
0x300
PDF
Img select hint_for_h
PDF
菩薩でもわかる!Rで動かすExcelアドインの作り方
KEY
Perlで伝統芸能
PPT
Cakephpstudy5 hacks jp
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
PDF
Yapc -asia 2012 lt @studio3104
PDF
asm.js x emscripten: The foundation of the next level Web games
PDF
PDF
PCさえあればいい。
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PDF
メモリ管理の話_エスキュービズム勉強会20140926
KEY
Mojoliciousをウェブ制作現場で使ってみてる
PDF
Ruby 同好会宣言
PPTX
実用裏方 Perl 入門
PPTX
USP 友の会 LT 資料 20130413
PDF
zsh とわたし
PDF
Haskell で CLI
PPT
CodeIgniterのページングに関して。
PPTX
Marionettejs getting started
0x300
Img select hint_for_h
菩薩でもわかる!Rで動かすExcelアドインの作り方
Perlで伝統芸能
Cakephpstudy5 hacks jp
GNU awk (gawk) を用いた Apache ログ解析方法
Yapc -asia 2012 lt @studio3104
asm.js x emscripten: The foundation of the next level Web games
PCさえあればいい。
awk v.s. bashどっちが強い?@OSC2011Tokyo
メモリ管理の話_エスキュービズム勉強会20140926
Mojoliciousをウェブ制作現場で使ってみてる
Ruby 同好会宣言
実用裏方 Perl 入門
USP 友の会 LT 資料 20130413
zsh とわたし
Haskell で CLI
CodeIgniterのページングに関して。
Marionettejs getting started
Ad

Viewers also liked (7)

PPT
The cold-war-1196708280940758-2
PDF
Linux_and_Xenomai
PDF
Network_Imperfections
PDF
Xenomai-3.0 on Ubilinux with Intel Edison
PDF
Real-time soultion
PPTX
PDF
Making Linux do Hard Real-time
The cold-war-1196708280940758-2
Linux_and_Xenomai
Network_Imperfections
Xenomai-3.0 on Ubilinux with Intel Edison
Real-time soultion
Making Linux do Hard Real-time
Ad

Similar to Start printf 6_takarakasai (20)

PDF
riscv instruction sets lets-impl-rv32i.pdf
PDF
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
PPTX
PHP AST 徹底解説
PDF
debugging server with strace
PPTX
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
PDF
ATSプログラミングチュートリアル
PDF
MlnagoyaRx
PDF
第2回品川Redmine勉強会(日本語全文検索)
PDF
Material
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
PDF
x86とコンテキストスイッチ
PDF
Rユーザのためのspark入門
PDF
CHP survey
PDF
F#入門 ~関数プログラミングとは何か~
PDF
Introduction to Initramfs - Initramfs-tools and Dracut
PDF
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
PDF
スタート低レイヤー #0
PDF
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
PDF
initramfsについて
PDF
並行プログラミングと継続モナド
riscv instruction sets lets-impl-rv32i.pdf
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
PHP AST 徹底解説
debugging server with strace
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
ATSプログラミングチュートリアル
MlnagoyaRx
第2回品川Redmine勉強会(日本語全文検索)
Material
やや関数型を意識した風Elixir/Phoenixご紹介
x86とコンテキストスイッチ
Rユーザのためのspark入門
CHP survey
F#入門 ~関数プログラミングとは何か~
Introduction to Initramfs - Initramfs-tools and Dracut
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
スタート低レイヤー #0
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
initramfsについて
並行プログラミングと継続モナド

Start printf 6_takarakasai