2021年3月6日のブックマーク (4件)

  • rustでCで書いた関数を呼ぶ / Cからrustで書いた関数を呼ぶ - 睡分不足

    rustからCの関数を呼ぶ方法(あるいは,その逆)は公式のドキュメント (https://doc.rust-lang.org/book/ffi.html)に書いてあるのでそれを読めばいいんで すが,自分で書いたCの関数を呼ぶ方法について直接は書いてないのでここに簡単に まとめてみます. rustでCで書いた関数を呼ぶ 以下のCで書いた関数をrustから呼ぶことを考えます. foo.c #include<stdio.h> void foo(){ printf("foo!!\n"); } rustから以下のようにして関数の呼び出しをおこないます. main.rs #[link(name="foo", kind="static")] extern{ fn foo(); } fn main() { unsafe {foo();}; } #[link(name="foo", kind="static

    rustでCで書いた関数を呼ぶ / Cからrustで書いた関数を呼ぶ - 睡分不足
    hrtshu
    hrtshu 2021/03/06
  • セクションとか.textとか

    キーワード セクション, オブジェクトファイルフォーマット, .text, プログラムローダ, ELF(Executable and Linkable Format) これだけは覚えよう プログラムは複数のセクションという単位に分割されている 原因と原理 私たちが日ごろ作っているプログラムは、ノイマン型コンピュータ上で動きます。ノイマン型コンピュータというのは、プログラムをメモリに蓄えているタイプのコンピュータ(Program stored computer)を指し、プロセッサとメモリを持ったものは大体ノイマン型です。当然私たちのプログラムもメモリにロードされて動いています。 プログラムが動くとき、さまざまな用途でメモリが使用されます。その用途は、機械語をおくためや、変数として値を格納しておくため、またC言語などでは関数呼び出しを行うためのスタックとして使用するため、mallocなどで動的

    hrtshu
    hrtshu 2021/03/06
    セクションの説明
  • 基本的な演算 | 作って分かる! x86_64機械語入門

    hrtshu
    hrtshu 2021/03/06
    汎用レジスタ一覧
  • x86アセンブリ言語での関数コール

    のように書けば関数を呼び出せるので、関数の呼び出しについてわざわざ説明するまでもありません。 ですが、アセンブリ言語では、そのような簡単な書き方はできません。 引数の準備をしたり、戻り値の渡し方を決めたりする必要があります。 このページでの目標は、アセンブリ言語で関数を読み書きできるようになることです。 まず引数の格納に使われるスタックについて復習してから、call・ret命令、ローカル変数の確保、leave命令、 関数呼び出しのルールである呼出規約について説明します。 説明の途中に、ブラウザで動く簡易アセンブラがあるので、ステップ実行してみてください。 スタックの内容がビジュアルに表示されるので、言葉だけの説明より理解しやすいと思います。 アセンブリ言語の表記には、Intel記法とAT&T記法がありますが、ここではIntel記法を使います。 コードは32ビットの環境であるとします。 関数