42Tokyo【プログラミング学校】 (408レス)
42Tokyo【プログラミング学校】 http://mevius.5ch.net/test/read.cgi/tech/1574083744/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
287: デフォルトの名無しさん [] 2022/08/24(水) 22:13:30.31 ID:Mzz9ZFgx 東大の学生さん42Tokyoの課題のアセンブラの問題もやってるんだなあ。 https://github.com/YJI5212/42Tokyo/blob/main/libasm/ft_strdup.s > _ft_strdup: > push rdi > call _ft_strlen > mov rdi, rax > call _malloc > jc .error > mov rdi, rax > pop rsi > call _ft_strcpy > ret > .error: > mov rbx, rax > call ___error > mov [rax], rbx > ret mallocが失敗したのをフラグで判定するのわけわからんw つかmallocするサイズも間違えてるしw ft_strcpy呼んでる時のスタックのアライメントや.errorに分岐 した際にrbx破壊してるの見るとx86-64のABI分かってないなw http://mevius.5ch.net/test/read.cgi/tech/1574083744/287
288: デフォルトの名無しさん [sage] 2022/08/24(水) 22:21:45.54 ID:Mzz9ZFgx https://github.com/unstoppa61e/libasm/blob/master/libasm/ft_strdup.s > %define ARG1 rdi > %define ARG2 rsi > %define ARG3 rdx > %define LEN rax > > default rel > > section .text > extern _ft_strlen > extern _ft_strcpy > extern _malloc > global _ft_strdup > > _ft_strdup: > push ARG1 ; var = str; > call _ft_strlen ; LEN = ft_strlen(str); > > lea ARG1, [LEN + 1] ; ARG1 = LEN + 1; > call _malloc ; LEN = malloc(ARG1); > > mov ARG1, rax ; ARG1 = retV (= mallocked str); > pop ARG2 ; ARG2 = var; > call _ft_strcpy ; retV = ft_strcpy(ARG1, ARG2); > > ret ; return (retV); もう一人の人のはmallocのエラーチェックなしかよw ft_strlenが返した値に+1してるのはさっきの人よかマシだが。 スタックのアライメント間違えてるのは同様だしやっぱABI分かって ないのね。 よくこんなコード公開するなあ。これでレビューしてんのかよ。ザルすぎだろ。 http://mevius.5ch.net/test/read.cgi/tech/1574083744/288
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s