No.8
- 回答日時:
> そのLinuxカーネルのソースコードはどこに載っていますか?
例えば下記URLの記事を参照のこと。ソースコードの読み方が書いてある。
https://qiita.com/Kernel_OGSun/items/1c0068e2bf5 …
システムコールについて詳しく知りたければ例えば下記URLを参照のこと。
https://www.kimullaa.com/entry/2020/01/05/191221
ただし、この記事はx86(32bit)ではなくx86-64(64bit)の場合の処理が書かれているのでx86とはかなり違う。
32bitの場合の説明を含むのは下記かな。
https://postd.cc/the-definitive-guide-to-linux-s …
No.7ベストアンサー
- 回答日時:
> どこを見ればシステムコール4番だと分かるのですか?
int $0x80 がシステムコール呼び出しです。システムコール呼び出し時のeaxの値がシステムコール番号です(※)から、int $0x80 の前に遡ってeaxに値を設定している命令を探します。
2行前の mov $0x4,%eax でeaxに0x4を代入しているのが最後ですから、eaxには4が入っています。だからシステムコール4番を実行しています。
※システムコール番号が呼び出し時のeax値というのはIntel x86系Linuxのシステムコール呼び出し規約です。ただこれに関する正式の文書がどこにあるかは把握していません。Linuxはオープンソースなので最悪Linuxカーネルのソースコードを読めば分かります。
そのLinuxカーネルのソースコードはどこに載っていますか?URLを貼ってもらうことは可能でしょうか?教えていただけないでしょうか?すみません。
No.6
- 回答日時:
>これの事です。
メラゾームさんが06/16 20:47に質問されて、回答されてるのと同一ですね。
https://oshiete.goo.ne.jp/qa/12414579.html
「C言語で書けばたった1行。
write(1,"Waka",4)」
ベストアンサーつけてないところが、何とも。
>もう少し詳しく教えていただけないでしょうか
何をもう少し詳しく知りたいのか、明確化してみては。
No.5
- 回答日時:
> b8 04 00 00 00 mov $0x4,%eax
> 89 e1 mov %esp,%ecx
> cd 80 int $0x80
int $0x80 はIntel x86系CPUにおけるLinuxカーネルコールで、これ自体はCPUを特権モードに移行して割り込みベクタテーブルの16進80番(10進でいうと128番)に記載されたアドレスに置かれている割り込み処理ルーチンを実行すると言うだけのこと。
Linux OSでは割り込みベクタテーブルの16進80番にシステムコールの入口が置かれているので、これがシステムコールの呼び出しになります。
どのシステムコールが実行されるかは、Intel x86系CPUのLinuxの場合は呼び出し時のeaxレジスタの値なので mov $0x4,%eax からシステムコール4番(write)が呼ばれていることが分かります。
No.4
- 回答日時:
UNIX でアセンブラを使うのに、システムコール番号を調べる方法もないというのは、信じられないのですが。
まあ、おそらくは、関数の引数(というか、スタックにある)4文字を画面に表示しているんじゃないかと思います。
No.3
- 回答日時:
そんな事、一律では決められない。
単に、制御(実行権)をカーネルに移すだけ。
具体的に何をする為なのかは、レジスタにセットした値で決まる。
値0x1をEAXレジスタにセットした後なら、プロセスを終了させる為。
これの事です。
(機械語データ) (アセンブリ言語)
b8 57 61 6b 61 mov $0x616b6157,%eax
53 push %ebx
50 push %eax
ba 04 00 00 00 mov $0x4,%edx
bb 01 00 00 00 mov $0x1,%ebx
b8 04 00 00 00 mov $0x4,%eax
89 e1 mov %esp,%ecx
cd 80 int $0x80
58 pop %eax
31 c0 xor %eax,%eax
5b pop %ebx
c3 ret
No.2
- 回答日時:
8086 で 割り込みベクタ 0x80 にシステムコールが配置されているのは、UNIX の特徴でしょう。
で、システムコールとは何をしていますかという質問は、(例えば、C言語の)標準ライブラリーは何をしていますか? というのと同じくらい漠然としています。
概ね、UNIX というOSの機能を使うには、システムコールを経由しなければなりません。
高級言語だとライブラに中に隠されていますが、アセンブラだと、int 0x80 というシステムコールの入り口が明示されているだけです。
具体的に何をしているかは、int 0x80 の前に、レジスタ(や、データ領域)に何をセットしているかで決まります。
これの事です。教えていただけないでしょうか?
(機械語データ) (アセンブリ言語)
b8 57 61 6b 61 mov $0x616b6157,%eax
53 push %ebx
50 push %eax
ba 04 00 00 00 mov $0x4,%edx
bb 01 00 00 00 mov $0x1,%ebx
b8 04 00 00 00 mov $0x4,%eax
89 e1 mov %esp,%ecx
cd 80 int $0x80
58 pop %eax
31 c0 xor %eax,%eax
5b pop %ebx
c3 ret
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- 高校 高校の倫理について!!明日中間です!!緊急教えてください。 語群があるのですが、ソクラテスが民主的な 1 2023/05/24 00:10
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラム言語について。
-
VBAでパワーシェルを実行したい...
-
C#とC++について。
-
CLispのloop内の挙動について
-
interface 2021年5月号 P46
-
VBA 電話番号の正規表現について
-
Windowsのアプリ開発ってなんの...
-
プログラミングのPythonのnoteb...
-
vba クリップボードクリアにつ...
-
ImageMagickでgif画像の一部が...
-
ExcelVBAでFormulaR1C1を列範囲...
-
pythonにてseleniumを使うも、...
-
ホワイトハッカー
-
小学1年生の子です。塾に行かせ...
-
pythonで複数画像からgifを作る...
-
ハッシュテーブル(連想配列)が...
-
httpリクエストの送り元の特定
-
楽しくて最高のプログラミング...
-
プログラミング
-
家庭のパソコンで Python の 環...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング
-
小学1年生の子です。塾に行かせ...
-
vba クリップボードクリアにつ...
-
プログラマーと学歴の関係性に...
-
Webサイト内に埋め込んだmp4動...
-
正規表現で複数マッチ条件で悩...
-
windowsでテキストファイルの各...
-
楽しくて最高のプログラミング...
-
プログラミング ソースコード
-
Pythonって何を意識した言語な...
-
プログラミングを教えたいです...
-
pythonで複数画像からgifを作る...
-
pythonにてseleniumを使うも、...
-
Pythonでgif画像が上手く作れない
-
Google ColaboでGUI作成
-
テキストファイルのファイル名...
-
プログラミング、アーキテクチ...
-
そのまま使っただけなのに・・...
-
このURLで広告を出しているのは...
-
chatGPTで次々と質問をしていく...
おすすめ情報
どこを見ればシステムコール4番だと分かるのですか?教えていただけないでしょうか?すみません。
int $0x80 はIntel x86系CPUにおけるLinuxカーネルコールで、これ自体はCPUを特権モードに移行して割り込みベクタテーブルの16進80番(10進でいうと128番)に記載されたアドレスに置かれている割り込み処理ルーチンを実行すると言うだけのこと。
Linux OSでは割り込みベクタテーブルの16進80番にシステムコールの入口が置かれているので、これがシステムコールの呼び出しになります。
これは、どういう意味でしょうか?教えていただけないでしょうか?すみません。16進80番に記載されたアドレスに置かれている割り込み処理ルーチンを実行すると言うだけのことというのが分かりません。教えていただけないでしょうか?すみません。
つまり、割り込み処理ルーチンで、システムコールの入り口を呼び出してシステムコールの何番を呼び出すのかを 2行前を見て判断する。という事でしょうか?ルーチンは決まった手順という意味であっていますでしょうか?教えていただけないでしょうか?すみません。