c言語で書いたコードをアセンブラで見てみました。
3つほどご質問があります。
c言語コード
#include <stdio.h> int main(){ printf("HelloWorld\n"); printf("Tata"); return 0; }
上記のようにprintfで文字列を2つ表示するコードとなっています。
①
画像より
「sub rcx,28h」でrcxから28バイト引いて領域を確保して、シャドウ領域を確保しているのは記事を見てなんとなくわかったのですが、「28h」の「h」は何なのでしょうか?
②
aHelloWorldの文字列の先頭にaをつけるのはアセンブリ言語の慣習的なルールだからでしょうか?
右の図のdbでhelloWorld\nをaHelloWorldに格納している認識で間違いはないですか?
③
rcxとカウンターレジスタという繰り返し処理を格納するレジスタにHelloWorldを入れているのは文字列を一文字一文字格納していくからでしょうか?
もし違っていたらご指摘をお願いします。
その記載されているリファレンスってどこにあるんですか。見てみたいので出典の場所を教えてください。
「シャドウ領域を確保しているのは記事」
http://wtz.synapse-blog.jp/blog_by_wtz/2016/03/64bit-7b2a.html
ただ「28h」の記載に関して「シャドウ領域、スタックをアライメントする」としか書かれていなかったので自分の中で28バイトアライメントするんだとちょっと誤解してました。
すいません。出典明記ありがとうございます。私は、アセンブラでpicをいじる機会しかなく記憶にも定着しなかったものなのであしからずお願いします。
回答2件
あなたの回答
tips
プレビュー