コピー2018.10.14前回C言語のプログラムをディスアセンブルしたソースを参考に、アセンブラを埋め込みました。関数の引数に割り当たるレジスタもおぼろげながら分かってきました。ポインタ引数の場合、どのレジスタに割り当たるのでしょうか。配列コピーのプログラムを作って確認してみます。}takk@deb9:~/tmp$func2(a,b,c)は、配列aを配列bにcの数分コピーする処理です。ビルドして実行します。a[2]=30takk@deb9:~/tmp$想定通りですね。-nfunc2のアセンブラを見てみましょう。retq文字列のコピーなのでアドレスを扱います。よってrdiやrsiといったインデックスレジスタが使用されますが、rから始まるレジスタ名は、64bitのレジスタになっています。RAXレジスタは以下ような単位でアクセスできます。|+-------+-------+-------+-------+-------+-------+-------+-------+さてfunc2のローカル変数を見ていきましょう。mainからfunc2の呼び出し部分のアセンブラは以下のようになっています。<func2>でfunc2のプロトタイプはこのようになっています。c)func2のaがrdi、bがrsi、cがrdxに割り当たっていますね。func2では、aからbへコピーするので、レジスタの役割としてはa、b逆に割り当たっています。関数のインターフェースを決める時は、第1引数をdestinationにしておいた方が、rdi/rsiレジスタが一致して読みやすくなりますね。以下のようなプログラムにする方が、アセンブラが分かりやすくなります。神アニメなんでしょうけど、そこまで夢中になって見てません。-O3オプションの続きです。一度、-O3オプションの説明を読んでみます。-O2との...9-1.ソース・ビルド・インストールsysvbannerのソースをいじってみるbannerを直接修正して、#を*に表示を変えてみます。任意のエディタでbanner.cを開きます。ソースを見たところで一旦エディタを終了します。sedを...9-1.ソース・ビルド・インストールマイtruncateを作る(その5)マイtruncate続きです。サイズの切り詰め処理は、truncateコマンドのソースを参考にしてみます。「マイtruncateを作る(その3)」で知りましたが、truncateコマンドでは、ftruncate関数を使ってました。-lコマンドで、シグナルの一覧を表示することができます。やって表示しているのでしょうか。例によってソースを落としてきます。killコマンドのソース内をgrepします。1番のSIGHUPを検索します。...9-1.ソース・ビルド・インストール花文字ソースビルドsysvbannerのプログラムをソースからビルドしてみます。ソースをapt-getで取得します。いうファイルが取得できました。中学浪人して高校に入ると不安でしょうがないでしょうねえ。自分だったら、高校は諦めて自宅で勉強してたかもしれません。急がば回れというので、ゆっくりでも前に進むということが大事ですね。email.ホーム9.ソース管理9-1.ソース・ビルド・インストールスポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。Policyホーム検索トップサイドバースポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。thanksタイトルとURLをコピーしました。