SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
Cコンパイラの改造(未)

     七誌
動機
• トレースのとき、逆アセンブルした命令がC言
  語ではどこなのか特定するのが面倒
 – シンボルを見ればどこの関数なのかは分かる
• C言語のセンテンスごとに対応するアセンブリ
  を特定したい
• gcc -g のようなイメージ
Cコンパイラのビルド
• Cコンパイラをいじるため、自作インタプリタで
  ビルドに挑戦
• ビルドは簡単に完了
• しかし・・・


まったく動かない!!!
まったく動かない!!!
アセンブラと格闘
• 何だかよく分からないので、インタプリタが止
  まっている付近を逆アセンブル
• 念のためV6のasでアセンブルしてバイナリを
  確認
• あれ?一致しない
• 延々と悩み続けた結果・・・ mov 10
                    10(r0), r0

ディスプレースメントは
ディスプレースメントは
プレフィックスなしでも8進数 だ!!
プレフィックスなしでも 進数だ
プレフィックスなしでも 進数だ!!
プレフィックスなしでも8進数
            進数だ
            進数
バイナリを疑え
• 振り出しに戻った
• リンク前のオブジェクトファイルを確認
• V6でCRC計算ツールでも作って確認しようか
  と思ったけど、ファイル抽出ツールで抜き出せ
  ば済むことに気付いたので中止
 – 私がまともに仕様を知っているのはCRC-32だけ
   だが、16bit CPUで計算するのは苦しいので、
   CRC-16の仕様を調べなくちゃ・・・とか迷走
• 比較の結果、完全に一致していた
410
• オブジェクトファイルは一致していたので、他
  の原因を調査。
• 410をサポートしていなかったため、-nを外し
  て407にしていたのが原因か?と疑う
 – それが問題になるとは考えにくいけど
• 410のサポートはdataセグメントをアラインす
  るだけなので簡単にできた
• c0とc2は動くようになった
• 依然としてc1が動かない・・・
simhで確認
• インタプリタでビルドするとき、シェルスクリプ
  トをMakefileに作り変えていた
• Makefileが実行するのと同じ手順を、手動で
  simh上のV6で行ってc1をビルド
• エラーが止まらない!
 – 自作インタプリタと同じ症状
 – インタプリタ自体はまともに動いているらしい
 – simh強制終了→ディスクイメージ破損
• どこかビルド手順を間違えたみたい・・・
runスクリプト
•   ビルドはrunというシェルスクリプトで行う
•   スクリプトをインタプリタ用に修正
•   ビルドしたらsimh上とバイナリが完全一致
•   もちろん完全動作



Makefileの作成ミスだった!
Makefileの作成ミスだった!
           ミスだった
スタブ
• runとMakefileをよく見比べたら、c1をリンクす
  るときにc1t.oが足りなかった
• リンクしなくてもundefinedにならないので気
  付かなかった
 – V6のldは同名のグローバルシンボルを1つにまと
   めるためextern不要だが、その仕様を利用して
   定義がc1h.cとc1t.sに重複していた
 – c1h.cがスタブで、c1t.sが実体
 – スタブの存在でundefinedが避けられていた
コンパイルフロー (1)
• cc a.c としてコンパイルするときに裏で呼ば
  れるコマンド

cc a.c
   /lib/c0 a.c /tmp/ctm1f /tmp/ctm2f
   /lib/c1 /tmp/ctm1f /tmp/ctm2f /tmp/ctm3f
   as - /tmp/ctm3f
         /lib/as2 /tmp/atm1a /tmp/atm2a /tmp/atm3a -g
   ld -X /lib/crt0.o a.o -lc -l
コンパイルフロー (2)
      c0                c1                as
           /tmp/ctm1f
a.c                          /tmp/ctm3f
           /tmp/ctm2f



よくわからないバイナリ                      アセンブリ出力
シリアライズされたAST?                    (-Sと同じ)


• c0で位置情報を残して、c1で埋め込みたい
ご清聴ありがとうございました

  ここでタイムアップです・・・

Más contenido relacionado

Destacado

お絵描きソフト「PaintField」の開発
お絵描きソフト「PaintField」の開発お絵描きソフト「PaintField」の開発
お絵描きソフト「PaintField」の開発
seanchas_t
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Kenichiro MATOHARA
 
文字コード勉強会
文字コード勉強会文字コード勉強会
文字コード勉強会
典彦 平原
 
マイコンでマルチタスク
マイコンでマルチタスクマイコンでマルチタスク
マイコンでマルチタスク
Katsuhiko Terawaki
 

Destacado (20)

マーク&スイープ勉強会
マーク&スイープ勉強会マーク&スイープ勉強会
マーク&スイープ勉強会
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
お絵描きソフト「PaintField」の開発
お絵描きソフト「PaintField」の開発お絵描きソフト「PaintField」の開発
お絵描きソフト「PaintField」の開発
 
F#とトランスレータ
F#とトランスレータF#とトランスレータ
F#とトランスレータ
 
無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
 
文字コードとセキュリティ
文字コードとセキュリティ文字コードとセキュリティ
文字コードとセキュリティ
 
新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
 
文字コード略歴
文字コード略歴文字コード略歴
文字コード略歴
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
文字コード勉強会
文字コード勉強会文字コード勉強会
文字コード勉強会
 
マイコンでマルチタスク
マイコンでマルチタスクマイコンでマルチタスク
マイコンでマルチタスク
 
文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会
 
文字コードのお話
文字コードのお話文字コードのお話
文字コードのお話
 
Rcppのすすめ
RcppのすすめRcppのすすめ
Rcppのすすめ
 
文字コード基礎論A
文字コード基礎論A文字コード基礎論A
文字コード基礎論A
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
 

Similar a Cコンパイラの改造(未)

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
Boost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめBoost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめ
Sigureya
 

Similar a Cコンパイラの改造(未) (13)

90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)
 
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
 
C++ tips4 cv修飾編
C++ tips4 cv修飾編C++ tips4 cv修飾編
C++ tips4 cv修飾編
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
 
とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIとあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)II
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
Coqでsprintf
CoqでsprintfCoqでsprintf
Coqでsprintf
 
Boost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめBoost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめ
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
 

Último

Último (7)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Cコンパイラの改造(未)