WebAssemblyリンカのGC

GCの基本 GC = garbege collection (プログラミング言語のランタイムのGCとは異なる) リンカに渡されたすべてのコード(データ)を愚直にすべて出力すると、サイズが大きくなりすぎてしまう。 出力ファイルは使われるコード(データ)のみを含むようにしたい。 …

AArch64 (Arm v8) についてのメモ (レジスタ,関数呼び出し,システムコール)

AArch64→x86-64のバイナリ変換について調べていときのAArch64のメモ Instruction Set Arm v8は3つの命令セットをサポートしている。 A32 (=ARM) T32 (=Thumb2) A64 A32とT32はどちらも32bitで、これらをまとめてAArch32という。 A32とT32はMOV PC, LDR PCな…

ヨーロッパ最大のOSS会議に参加した

はじめに 2/2~2/3にかけてベルギーのブリュッセル自由大学で開催されたFOSDEM 2024に参加してきた。 現地参加のきっかけは、去年参加したGSoCで知り合ったGCCのメンテナのThomasさんに発表しないかと言われ、プレゼンを聞くだけでなく発表もしてきた。 自分…

リンカ自作メモ

はじめに 二年前にC++の勉強のついでに作った簡単な静的オブジェクトのリンカを書いた。 github.com 今度はRustで書き直している。最初の目標はlibc.soを動的or静的リンクして、Hello worldを動かすこと。 github.com 現時点での参考文献を挙げる。 mold git…

GCCのGENERICを可視化する

GCCのGENERICをGraphvizで可視化する。 https://gist.github.com/tonyseek/4161012 からコードを拝借する。 以下のように3つファイルを作る。 astviz: #!/usr/bin/env sh SCRIPT_PATH=$(dirname $0) gcc -o $1 $1.c -fdump-tree-original-raw $SCRIPT_PATH/p…

GCC本体を快適に開発する

はじめに 言語問わず、LLVMと比べGCCの貢献に関するドキュメントが少なく感じるので、メモ程度に残しておきます。GCCのビルドの方法は色んなところに書いてあるので、そちらを参照してください。 対象読者は以下のとおりです。 GCCのソースコードを読みたい…

GSoC(gcc Rust)の進捗報告

GSoC2023でGCC RustフロントエンドのUnicodeサポートに取り組んでいます。 先週、midterm eveluationが終わり、無事に通過することができました。 この記事では、時系列順に取り組んだことと今後について説明します。 現状 こんな感じで、ソースコード内で色…

GSoC2023 (GCC) に参加します

TL;DR GSoC通りました!GCCのRust frontendのUnicodeサポートをする予定です pic.twitter.com/8gCfPMapTm— tamaron (@tamaroning) May 5, 2023 Google Summer of Codeに提出したproposalが採択されました GCCのRustフロントエンドに対するUnicodeサポートを…

rust-lang/cargo ソースコードリーディング

はじめに cargoにはバイナリの名前をパッケージ名と異なるものにする機能がある。 この機能はcargo-feature different_binary_nameという。 Cargo.tomlに以下を追記すると、cargo buildで出力されるバイナリはpiyoになる。 [[bin]] name = "piyo" path = "sr…

Rustコンパイラのソースコードリーディング

これはKMC(京大マイコンクラブ)アドベントカレンダー2021 の3日目の記事です。 昨日の記事はうたがわききさんの「List::Utilのpairs関数がPythonで欲しくなって」でした。 はじめに こんにちは。一回生のたまろんです。最近は言語処理系を読んだり書いたりし…

コンパイラ最適化を実装する

自作したインタプリタにいくつかのコンパイラ最適化を実装したので、そのときのメモを残しておく。 作ったもの github.com 入力したプログラムは以下の順で処理される。 Lex : プログラムをトークン列に変換 Parse : トークン列を中間表現に変換 Optimize : …

セキュリティキャンプ2021応募課題

セキュリティキャンプ全国大会2021に参加することになりました。応募用紙を書くにあたって、先人たちの応募用紙晒しが役立ったので、僕も応募課題を晒します。 冗長なところとかは一部省略してます。 セキュリティ・キャンプ全国大会2021 脅威解析トラック …

CSAW CTF 2013 exploit200 [writeup]

問題バイナリ shell-storm.org まずバイナリを実行してみると、何も表示されず動作が全くわからなかった。 いわゆるfork-server型の問題、初めてだったので他の方のサイトを参考にして進めた。 $ strace ./exploit2 を実行してシステムコールを追うことがで…

Beginners CTF 2020 [writeup]

以下の解けた問題のみwriteupを載せます。 [pwn] Beginner's Stack [pwn] Beginner's Heap [crypto] R&B [misc] emoemoencode Beginner's Stack プログラム実行前後のスタックの状態がダンプされるようになっている。 リターンアドレスとbufferのオフセット…

エクスプロイトにおけるStack Pivotingについて

stack pivotingとは stack領域をheapなどの別の領域に移すこと。 モチベーション stack based BoFの脆弱性が存在し、stack canaryが無効のときROPなどでstack内に大きな領域が必要な場合がある。 そのとき、さらにBoFできる量が限られてる場合の回避方法とな…

x86におけるスタック操作

自分用メモ 以下のプログラムでx86における関数呼び出し時のスタックの使い方 start: // ... push 3 push 2 push 1 call func // func(1,2,3) sub esp, 12 // ... func: push ebp mov ebp, esp // -- 関数の処理 -- mov esp, ebp //espの復元 pop ebp // ebp…

ROP Emporium (3)Write4 [writeup]

・問題リンク ropemporium.com まずstringsコマンドで静的解析をする $ strings write432 ... /bin/ls ... プログラム内部でsystem()を呼び出していそうなことがわかる $ gdb write432 gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX : ENABLE…