VOOZH about

URL: https://qiita.com/akakou/items/b3279b2de09b62261b7e

⇱ nasmでprintf関数を使う #アセンブリ - Qiita


👁 Image
7

Go to list of users who liked

1

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

@akakou(あかこう)

nasmでprintf関数を使う

7
Last updated at Posted at 2017-10-13

はじめに

nasmでというアセンブリでprintf関数を呼び出して、数値と文字を表示させることをしたのでここにメモをしておきます。

コード

ソースコード

; 初期設定
extern printf ; 1. printf関数を持ってくる

; データセクション
section .data
 fmt: db "x=%d", 10, 0 ; 2. printfで使うフォーマットを定義

; コードセクション
section .text
 global _start ; _startを指名


; スタート
_start:
 ; printfに使うレジスタの値を指定のレジスタに移動
 mov rdi, fmt ; 3. printfのフォーマットをレジスタに置く
 mov rsi, 1234567890 ; 4. 出力する数値の指定

 call printf ; 5. printfをコール

 ; 後処理
 mov rax, 1 ; システムコール番号(sys_exit)
 mov rbx, 0 ; 終了ステータスコード
 int 0x80 ; システムコール

実行

$nasm -f elf64 ファイル名
$gcc 生成したオブジェクトファイル名 -nostartfiles -no-pie
$./a.out
x=1234567890

解説

1. printf関数を持ってくる

以下のコードで、printf関数を読み込みます。

extern printf

2. printfで使うフォーマットを定義

以下のコードで、printfのフォーマットを定義します。

fmt: db "x=%d", 10, 0

3. printfのフォーマットをレジスタに置く

以下のコードで、6行目で定義したフォーマット("x=%d", 10, 0)を、printfで使用するようにレジスタに置きます。

mov rdi, fmt

4. 出力する数値の指定

以下のコードで表示する値、出力する数値(1234567890)を指定します。

mov rsi, 1234567890

5. printfをコール

call printf

さいごに

こんな感じで、printf関数を呼び出しました。
何か間違ったこと等あればコメントください。

7

Go to list of users who liked

1
2

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7

Go to list of users who liked

1