!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 151
https://mevius.5ch.net/test/read.cgi/tech/1554171817/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 152
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (アウアウウー Sa4f-7DQ/)
2019/06/17(月) 18:27:10.41ID:3L1/L9kLa918デフォルトの名無しさん (ササクッテロ Sp75-0ye8)
2019/08/12(月) 18:58:43.13ID:awsnfbDbp >>917
自宅での開発環境は構築できているので、学習進めて行きます!
自宅での開発環境は構築できているので、学習進めて行きます!
919デフォルトの名無しさん (ワッチョイ b161-JGwf)
2019/08/12(月) 23:48:36.60ID:n9pQsVg70 >>874
結論的には、ローカル変数はスタック上に確保され、スタックには関数の呼び出し
元へマシン語の ret 文で帰るための「戻りアドレス」や、以前のスタックフレームの
先頭アドレスを保存しておくために、push ebp とした際の関数の呼び出し元の
スタックフレームの ebp の値なども入ってる。
なので、ローカル変数として、TYPE a[10]; のような配列 a を確保して、
a[x] で x の範囲が 9 を超えた場合、その戻りアドレスが壊される確率がとても
高い。
1. 戻りアドレスがへんな値に書き換われば、関数から戻る際に変なアドレスに
戻ろうとする。するとコード領域以外のデータ領域に戻ろうとしたり、
ページングされて無い変なページに戻ろうとすることになり、保護例外
が発生する可能性が高い。またたまたま、そのアドレスに「戻った(実際には
戻ったわけではなく、変なアドレスに jmp しただけ)」際に、
新しいアドレスのマシン語が変な命令に解釈されて、高い確率で
何らかの保護冷害が発生する。
2. 関数の最後で pop ebp を実行してから、元の関数へ戻ると、
ローカル変数は、mov [ebp+ofs],eax のような形でアクセスされる。
だから、スタックが変に書き換わっていた場合、ebp が変なアドレスになり、
[ebp+ofs]のアクセスの部分で保護例外が起きる。
結論的には、ローカル変数はスタック上に確保され、スタックには関数の呼び出し
元へマシン語の ret 文で帰るための「戻りアドレス」や、以前のスタックフレームの
先頭アドレスを保存しておくために、push ebp とした際の関数の呼び出し元の
スタックフレームの ebp の値なども入ってる。
なので、ローカル変数として、TYPE a[10]; のような配列 a を確保して、
a[x] で x の範囲が 9 を超えた場合、その戻りアドレスが壊される確率がとても
高い。
1. 戻りアドレスがへんな値に書き換われば、関数から戻る際に変なアドレスに
戻ろうとする。するとコード領域以外のデータ領域に戻ろうとしたり、
ページングされて無い変なページに戻ろうとすることになり、保護例外
が発生する可能性が高い。またたまたま、そのアドレスに「戻った(実際には
戻ったわけではなく、変なアドレスに jmp しただけ)」際に、
新しいアドレスのマシン語が変な命令に解釈されて、高い確率で
何らかの保護冷害が発生する。
2. 関数の最後で pop ebp を実行してから、元の関数へ戻ると、
ローカル変数は、mov [ebp+ofs],eax のような形でアクセスされる。
だから、スタックが変に書き換わっていた場合、ebp が変なアドレスになり、
[ebp+ofs]のアクセスの部分で保護例外が起きる。
920デフォルトの名無しさん (アウアウエー Sa02-O5Qm)
2019/08/13(火) 00:08:44.00ID:bI98bSLia よくわからんが、retして顕在化する問題の発生が増えたってこと?
921デフォルトの名無しさん (ラクペッ MMdd-u6+H)
2019/08/13(火) 01:31:47.80ID:l5EJHg1rM 20年ぐらい前からという条件なら特に変わりは無いだろう
922デフォルトの名無しさん (ワッチョイ 5563-iNuD)
2019/08/13(火) 06:54:43.14ID:tpzkwMyE0 それ以上前はCPUが8086だった…
923デフォルトの名無しさん (ワッチョイ 45ab-dKkF)
2019/08/13(火) 07:02:22.00ID:0//4zuKx0 寒いな
924デフォルトの名無しさん (アウアウウー Sa39-H0Mu)
2019/08/13(火) 09:45:48.76ID:2qtnUYLta いわゆる普通の Windows PC だとそんな感じかな?中身が Windows NT のやつになってよりまともな感じのOSになったと。
しかし他のOSやCPUでは約20年前からとか、そういうのはない。あったとしても時期が違う。
しかし他のOSやCPUでは約20年前からとか、そういうのはない。あったとしても時期が違う。
925デフォルトの名無しさん (ワッチョイ 7663-+P8T)
2019/08/13(火) 09:56:43.52ID:AAd69x7F0 NTになってからも、この現象は起きます
926デフォルトの名無しさん (ワッチョイ b17c-JGwf)
2019/08/13(火) 10:26:31.42ID:rjuNmU8i0 >>920
OSがプロテクトモード(保護モード)で動作して、アプリが保護違反をしてないかCPUが常に監視
しながら動くようになってからはその辺の事情は特に変わってない。なお、
スタックフレームは、
関数名 proc
push ebp
mov ebp,esp
sub esp,定数値
・・・
mov esp,ebp
pop ebp
ret
関数名 endp
のような形式になっていて、もしローカル変数として配列を確保して、それが
バッファオーバーランした書き込みを行った場合、上記の pop ebp で変なアドレス
がebpに入り、retで変なアドレスへ飛ぼうとする。変なアドレスに飛ぼうとしたら
そこで保護例外が起きる確率が高くなる。また、上記の関数の構造は、関数を
呼び出した親の関数でも同じなので、そこでも、祖父の関数へ戻る際、
最後の方で mov esp,ebpという命令が実行される。しかし、今言ったように
ebpに狂ったアドレスが入ってしまっていれば、この命令で esp = ebp
とされようとしたときにセグメンテーション・フォールトが起きる可能性が
高くなる。espへの代入は、保護に関して他のレジスタへの代入とは違う
特別な処理がされており、ss というスタックセグメントの範囲から逸脱していないか、
また、espが4で割り切れる値になっているかどうかのチェックが入る。
それは普通のページング・フォールトのチェックだけよりも調査項目が増えるので
より厳しくなる。
OSがプロテクトモード(保護モード)で動作して、アプリが保護違反をしてないかCPUが常に監視
しながら動くようになってからはその辺の事情は特に変わってない。なお、
スタックフレームは、
関数名 proc
push ebp
mov ebp,esp
sub esp,定数値
・・・
mov esp,ebp
pop ebp
ret
関数名 endp
のような形式になっていて、もしローカル変数として配列を確保して、それが
バッファオーバーランした書き込みを行った場合、上記の pop ebp で変なアドレス
がebpに入り、retで変なアドレスへ飛ぼうとする。変なアドレスに飛ぼうとしたら
そこで保護例外が起きる確率が高くなる。また、上記の関数の構造は、関数を
呼び出した親の関数でも同じなので、そこでも、祖父の関数へ戻る際、
最後の方で mov esp,ebpという命令が実行される。しかし、今言ったように
ebpに狂ったアドレスが入ってしまっていれば、この命令で esp = ebp
とされようとしたときにセグメンテーション・フォールトが起きる可能性が
高くなる。espへの代入は、保護に関して他のレジスタへの代入とは違う
特別な処理がされており、ss というスタックセグメントの範囲から逸脱していないか、
また、espが4で割り切れる値になっているかどうかのチェックが入る。
それは普通のページング・フォールトのチェックだけよりも調査項目が増えるので
より厳しくなる。
927デフォルトの名無しさん (アウアウエー Sa02-O5Qm)
2019/08/13(火) 10:32:41.54ID:bI98bSLia だから、何が変わったのか言えよ
928デフォルトの名無しさん (ワッチョイ b161-JGwf)
2019/08/13(火) 10:40:59.48ID:+uxvNwqI0 >>926
・ret文で変なアドレスに飛ぼうとした場合、そのページが実行属性が付いていない
場合や、そもそもページングされて無いアドレスであればページ例外が起きる。
さらに、たまたまそのチェックがすり抜けても飛んだ先の命令列のうちのどこかが、
存在しない命令パターンだったり、アプリでは使ってはいけない命令に
なってしまっている確率も結構、高頻度で有ってその場合「不法命令外」
というものが生じる・
・esp=ebpにされる際、espが4で割り切れるかどうかのチェック入る。だから、
スタックが破壊された場合、3/4(4分の3)、即ち75%の確率でここで
スタック保護例外が生じる。また、スタック・セグメントの範囲チェックで、
大体、50%〜90%くらいの確率で異常が発見される。そして、これら二つの
チェックで異常が発見される確率は、1-(1-0.75)*(1-0.5〜0.9)程度の確率となる。
となり、僅かでもスタックのebpの保存場所にバッファオーバーランが派生した場合、
結構な高確率で異常が発見される。大体、これだけでも、9割以上。
・上記は、偶然に異常が発見される確率。全ての確立を総合すると、
1-(1-p_1)(1-p_2)・・・(1-p_n) のような形で偶然にして異常が発見されるが、
チェック項目の個数 n が十分大きいと、割と即座に近い時期に異常がたまたま発見される
確率は、99%位になっても不思議は無い。これは数学の話。
・ret文で変なアドレスに飛ぼうとした場合、そのページが実行属性が付いていない
場合や、そもそもページングされて無いアドレスであればページ例外が起きる。
さらに、たまたまそのチェックがすり抜けても飛んだ先の命令列のうちのどこかが、
存在しない命令パターンだったり、アプリでは使ってはいけない命令に
なってしまっている確率も結構、高頻度で有ってその場合「不法命令外」
というものが生じる・
・esp=ebpにされる際、espが4で割り切れるかどうかのチェック入る。だから、
スタックが破壊された場合、3/4(4分の3)、即ち75%の確率でここで
スタック保護例外が生じる。また、スタック・セグメントの範囲チェックで、
大体、50%〜90%くらいの確率で異常が発見される。そして、これら二つの
チェックで異常が発見される確率は、1-(1-0.75)*(1-0.5〜0.9)程度の確率となる。
となり、僅かでもスタックのebpの保存場所にバッファオーバーランが派生した場合、
結構な高確率で異常が発見される。大体、これだけでも、9割以上。
・上記は、偶然に異常が発見される確率。全ての確立を総合すると、
1-(1-p_1)(1-p_2)・・・(1-p_n) のような形で偶然にして異常が発見されるが、
チェック項目の個数 n が十分大きいと、割と即座に近い時期に異常がたまたま発見される
確率は、99%位になっても不思議は無い。これは数学の話。
929デフォルトの名無しさん (ワッチョイ b161-JGwf)
2019/08/13(火) 10:42:39.25ID:+uxvNwqI0930デフォルトの名無しさん (アウアウエー Sa02-O5Qm)
2019/08/13(火) 10:48:21.44ID:bI98bSLia 確立って書くのは例外なくアホ
931デフォルトの名無しさん (ワッチョイ b17c-JGwf)
2019/08/13(火) 10:50:03.67ID:rjuNmU8i0 変換ミスだよ。
932デフォルトの名無しさん (スッップ Sdfa-MjoS)
2019/08/13(火) 11:41:48.81ID:/0JIigTLd フン、難しすぎてチンプンカンプンだぜ
933デフォルトの名無しさん (ワッチョイ b17c-JGwf)
2019/08/13(火) 12:09:25.81ID:rjuNmU8i0934デフォルトの名無しさん (ワッチョイ 7663-+P8T)
2019/08/13(火) 12:15:52.88ID:AAd69x7F0 まだちゃんと動作していないよ
CPUがなんちゃってプロテクトモードだから
CPUがなんちゃってプロテクトモードだから
>>933
ユーザーアドレス空間をいちいちチェックしているとは思えませんが…
ユーザーアドレス空間をいちいちチェックしているとは思えませんが…
936デフォルトの名無しさん (アウアウウー Sa39-H0Mu)
2019/08/13(火) 12:41:24.24ID:2qtnUYLta 95や98とXPは違う、っていうなら単純にOSの違いが影響していると思われ
937デフォルトの名無しさん (ワッチョイ b17c-JGwf)
2019/08/13(火) 14:07:38.62ID:rjuNmU8i0 >>935
プロテクトモードだとCPUが常にチェックし続けてますよ。
3.5GHzとかで、1命令実行するたびにチェックしながら動いています。
ハードウェアレベルでそういうチェック機構がCPUの内部に入っているので。
プロテクトモードだとCPUが常にチェックし続けてますよ。
3.5GHzとかで、1命令実行するたびにチェックしながら動いています。
ハードウェアレベルでそういうチェック機構がCPUの内部に入っているので。
938デフォルトの名無しさん (ワッチョイ 45f6-X5Lh)
2019/08/13(火) 16:10:25.29ID:74dfGXTi0 ソフトと違い、ハードでのチェックは処理時間を遅延させないからな
939デフォルトの名無しさん (ワッチョイ 9501-InMM)
2019/08/13(火) 17:04:27.47ID:5q1NdOKU0 >>938
厳密にはそれは言い過ぎ。
厳密にはそれは言い過ぎ。
940デフォルトの名無しさん (ワッチョイ 45f6-X5Lh)
2019/08/13(火) 17:08:00.20ID:74dfGXTi0 V=Rは速いとか言いたいのか?
941デフォルトの名無しさん (ワッチョイ da01-RqjC)
2019/08/13(火) 17:48:57.55ID:b87Bd4Qh0 最近はあまりないけどMMUの処理で1サイクル遅延するハードとかもあったよ
要するに「常に」処理時間を遅延させないってわけじゃないってことな
要するに「常に」処理時間を遅延させないってわけじゃないってことな
942デフォルトの名無しさん (ワッチョイ b17c-JGwf)
2019/08/13(火) 19:33:45.29ID:rjuNmU8i0 >>941
現代のCPUでは、パイプラインを使っているのである程度重い処理であっても、
速度低下には繋がらないような仕組みがあります。
結構複雑なMMUの処理が入っても1命令の実行速度の低下は全く無いことが
多いです。
現代のCPUでは、パイプラインを使っているのである程度重い処理であっても、
速度低下には繋がらないような仕組みがあります。
結構複雑なMMUの処理が入っても1命令の実行速度の低下は全く無いことが
多いです。
943デフォルトの名無しさん (ワッチョイ 5563-iNuD)
2019/08/13(火) 19:56:23.66ID:tpzkwMyE0 そこまでやってくれるのにバッファオーバーラン自体はチェックしてくれんのですか
944デフォルトの名無しさん (ワッチョイ 7663-+P8T)
2019/08/13(火) 20:04:59.83ID:AAd69x7F0 最近のCPUでの脆弱性がどうして起きているか,誰か解説して
945デフォルトの名無しさん (アウアウエー Sa02-O5Qm)
2019/08/13(火) 20:05:05.08ID:UammDDeWa まあそっちはばるぐりどんの仕事だよね。
最近は全然関係ないところでバスエラーが発生する様なプログラムはあんまり見なくなったわ。新規に作り込むことはないだろうし、古いコードもあらかた直したし。
最近は全然関係ないところでバスエラーが発生する様なプログラムはあんまり見なくなったわ。新規に作り込むことはないだろうし、古いコードもあらかた直したし。
946デフォルトの名無しさん (ワッチョイ da01-RqjC)
2019/08/13(火) 20:23:31.85ID:b87Bd4Qh0947デフォルトの名無しさん (ワッチョイ 7d9f-PMB1)
2019/08/13(火) 22:27:20.37ID:mICjniMU0 >>943
バッファオーバーランはプログラム上の論理的な境界の問題だから、ハードウェア的に一律に処理することはできないよ
バッファオーバーランはプログラム上の論理的な境界の問題だから、ハードウェア的に一律に処理することはできないよ
948デフォルトの名無しさん (ワッチョイ daad-LRiH)
2019/08/13(火) 22:48:57.58ID:1mKsD1EO0 バイト単位でマスク掛けてそこからはみ出すアクセスで割り込みできればなんとかなりそう。
949デフォルトの名無しさん (ワッチョイ 7a40-X5Lh)
2019/08/14(水) 13:20:34.48ID:FpyX88UP0 仮想アドレスってどう実装されてるの?
86系はセグメントで先頭アドレス決めてるだけだろうけど。
86系はセグメントで先頭アドレス決めてるだけだろうけど。
950デフォルトの名無しさん (ワッチョイ 7663-+P8T)
2019/08/14(水) 13:30:00.49ID:29pnbISy0 >>949
仮想86モードのこと?
仮想86モードのこと?
951デフォルトの名無しさん (ワッチョイ da01-RqjC)
2019/08/14(水) 13:51:20.29ID:xanGzDta0 >>949
ページングの話なのかセグメントの話なのか
ページングの話なのかセグメントの話なのか
952デフォルトの名無しさん (ワッチョイ 5a61-JGwf)
2019/08/14(水) 14:20:06.89ID:meO8Vw3B0953デフォルトの名無しさん (ワッチョイ da01-RqjC)
2019/08/14(水) 14:29:06.01ID:xanGzDta0954デフォルトの名無しさん (ワッチョイ 5a61-JGwf)
2019/08/14(水) 15:01:22.77ID:meO8Vw3B0 >>949
記憶に頼って書くので、少し間違いがあるかもしれないが、IA32では、
・仮想アドレスの4KBの領域が1ページと呼ばれる。
・それぞれのページの先頭アドレスには好きな物理アドレスを割り付けることが
出来る。また、ページごとに、R,W,E 属性などを ON/OFF できる。
Read/Write/Execute ができるかどうかを指定できるということ。
・1024個のページのをまとめてテーブルにして、そこにそれぞれのページの
上記情報をまとめて書く。このテーブルは連続した4MBの仮想アドレス領域
に対応している。このテーブルは、1ページあたりが4バイトになっていて、
「エントリ」と呼ばれる。4バイトのエントリが1024個集まって1つの
テーブルを形作り、「ページテーブル」という。ページテーブル自体も
また4KBになっていて、ページのサイズと同じになっている。
・さらに、このページテーブルの先頭アドレスを1024個分まとめて書いた配列があり、
ページディレクトリと呼ばれる。既に述べたようにページテーブルが仮想アドレス
4MB分を管理するので、1024個分まとまると 4MB * 1024 = 4GB 分を管理
することができるようになる。これで2^32=4GBに相当するので32BITのアドレス
空間全てを管理できるようになる。
・ページテーブルの中には、物理アドレスを割り付けないページを作ることも出来る。
・ページディレクトリも、ページテーブルを割り付けないエントリが有っても良い。
・ページディレクトリが置かれた物理アドレスは、CPUの特殊な専用レジスタの中に
入れられる。
・ぺージディレクトリ、ページテーブルの情報は、メモリアクセスを伴うマシンご命令を
実行する際に必ず必要になるので、高速化するため、TLB(Translation Lookaside Buffer
、アドレス変換バッファ)という専用のキャッシュ領域に格納されて、とても高速に
処理できるようになっている。TLBのキャッシュをクリアして再度構築する(読み込む)
には、結構時間がかかるといわれており、これがOSのプロセス(タスク)切り替えの
大きなオーバーヘッドを生むといわれている。
記憶に頼って書くので、少し間違いがあるかもしれないが、IA32では、
・仮想アドレスの4KBの領域が1ページと呼ばれる。
・それぞれのページの先頭アドレスには好きな物理アドレスを割り付けることが
出来る。また、ページごとに、R,W,E 属性などを ON/OFF できる。
Read/Write/Execute ができるかどうかを指定できるということ。
・1024個のページのをまとめてテーブルにして、そこにそれぞれのページの
上記情報をまとめて書く。このテーブルは連続した4MBの仮想アドレス領域
に対応している。このテーブルは、1ページあたりが4バイトになっていて、
「エントリ」と呼ばれる。4バイトのエントリが1024個集まって1つの
テーブルを形作り、「ページテーブル」という。ページテーブル自体も
また4KBになっていて、ページのサイズと同じになっている。
・さらに、このページテーブルの先頭アドレスを1024個分まとめて書いた配列があり、
ページディレクトリと呼ばれる。既に述べたようにページテーブルが仮想アドレス
4MB分を管理するので、1024個分まとまると 4MB * 1024 = 4GB 分を管理
することができるようになる。これで2^32=4GBに相当するので32BITのアドレス
空間全てを管理できるようになる。
・ページテーブルの中には、物理アドレスを割り付けないページを作ることも出来る。
・ページディレクトリも、ページテーブルを割り付けないエントリが有っても良い。
・ページディレクトリが置かれた物理アドレスは、CPUの特殊な専用レジスタの中に
入れられる。
・ぺージディレクトリ、ページテーブルの情報は、メモリアクセスを伴うマシンご命令を
実行する際に必ず必要になるので、高速化するため、TLB(Translation Lookaside Buffer
、アドレス変換バッファ)という専用のキャッシュ領域に格納されて、とても高速に
処理できるようになっている。TLBのキャッシュをクリアして再度構築する(読み込む)
には、結構時間がかかるといわれており、これがOSのプロセス(タスク)切り替えの
大きなオーバーヘッドを生むといわれている。
955デフォルトの名無しさん (ワッチョイ 5a61-JGwf)
2019/08/14(水) 15:11:00.14ID:meO8Vw3B0 >>949
なお、WindowsやLinuxでは、セグメンテーションの方は積極的には
ほとんど使っておらず、意味がある使い方をしているのはページングの方だけ。
だから、デファクトスタンダードのOSは、ほぼ全てページングだけを使っている
と言っても過言では無い。セグメンテーションは、スタック領域(esp,ebp)の
ためだけにはやや意味のある使い方がなされる場合があるかも知れない。
というのはスタック領域については、CPUの保護がちょっとだけ強く保護できる
仕組みを持っているが、それがセグメンテーションの仕組みを使っているから。
例えば、仮想アドレス領域の一部だけをスタック領域にして、そこからはみ出た
場合には保護例外を発生させたいような場合には、セグメンテーションが利用できる。
上手く使えば、スタックの自動伸張にも使えないことも無い。ただし、
自動伸張にか関してはそんなに上手く使いこなせる仕組みでも、そんなに
効率が上げられる訳でもない。再帰関数の何度も呼びすぎてスタック
を使いすぎた場合にプログラマにエラーを表示するような目的には
使おうと思えば使える。
なお、WindowsやLinuxでは、セグメンテーションの方は積極的には
ほとんど使っておらず、意味がある使い方をしているのはページングの方だけ。
だから、デファクトスタンダードのOSは、ほぼ全てページングだけを使っている
と言っても過言では無い。セグメンテーションは、スタック領域(esp,ebp)の
ためだけにはやや意味のある使い方がなされる場合があるかも知れない。
というのはスタック領域については、CPUの保護がちょっとだけ強く保護できる
仕組みを持っているが、それがセグメンテーションの仕組みを使っているから。
例えば、仮想アドレス領域の一部だけをスタック領域にして、そこからはみ出た
場合には保護例外を発生させたいような場合には、セグメンテーションが利用できる。
上手く使えば、スタックの自動伸張にも使えないことも無い。ただし、
自動伸張にか関してはそんなに上手く使いこなせる仕組みでも、そんなに
効率が上げられる訳でもない。再帰関数の何度も呼びすぎてスタック
を使いすぎた場合にプログラマにエラーを表示するような目的には
使おうと思えば使える。
956デフォルトの名無しさん (バッミングク MM49-lbBw)
2019/08/14(水) 17:57:06.94ID:vUE0DVkpM いくつか補足
>>・仮想アドレスの4KBの領域が1ページと呼ばれる。
今のx86では4MB、x64では2MBのページや1GBのページも使え、メモリ使用効率を犠牲にして大量のメモリを使うプログラムのパフォーマンスを上げられるようになっている。
>>・それぞれのページの先頭アドレスには好きな物理アドレスを割り付けることが出来る。また、ページごとに、R,W,E 属性などを ON/OFF できる。
先頭アドレスが設定できるアドレスは4kB毎。x86でのExecute指定はPAEが有効な時のみ
>>・1024個のページのをまとめてテーブルにして、
x64とPAE有効なx86では8バイト512エントリ
>>・さらに、このページテーブルの先頭アドレスを1024個分まとめて書いた配列があり、ページディレクトリと呼ばれる。
x64では512エントリのテーブルが4段で1ページ4kBだから、4*9+12=48ビットの物理メモリまで指定できる
>>例えば、仮想アドレス領域の一部だけをスタック領域にして、そこからはみ出た場合には保護例外を発生させたいような場合には、セグメンテーションが利用できる。
x86では出来るが、ページングで自動伸長やスタックオーバーフロー検出を特に問題なくできるからわざわざ使わないし、x64ではベースとリミットが廃止されたから不可能
あと、x64で互換モード(32bit)とlongモード(64bit)の切り換えはコードセグメントの設定で自動的に行われるから、そのためには最低2つのコードセグメントが必要
>>・仮想アドレスの4KBの領域が1ページと呼ばれる。
今のx86では4MB、x64では2MBのページや1GBのページも使え、メモリ使用効率を犠牲にして大量のメモリを使うプログラムのパフォーマンスを上げられるようになっている。
>>・それぞれのページの先頭アドレスには好きな物理アドレスを割り付けることが出来る。また、ページごとに、R,W,E 属性などを ON/OFF できる。
先頭アドレスが設定できるアドレスは4kB毎。x86でのExecute指定はPAEが有効な時のみ
>>・1024個のページのをまとめてテーブルにして、
x64とPAE有効なx86では8バイト512エントリ
>>・さらに、このページテーブルの先頭アドレスを1024個分まとめて書いた配列があり、ページディレクトリと呼ばれる。
x64では512エントリのテーブルが4段で1ページ4kBだから、4*9+12=48ビットの物理メモリまで指定できる
>>例えば、仮想アドレス領域の一部だけをスタック領域にして、そこからはみ出た場合には保護例外を発生させたいような場合には、セグメンテーションが利用できる。
x86では出来るが、ページングで自動伸長やスタックオーバーフロー検出を特に問題なくできるからわざわざ使わないし、x64ではベースとリミットが廃止されたから不可能
あと、x64で互換モード(32bit)とlongモード(64bit)の切り換えはコードセグメントの設定で自動的に行われるから、そのためには最低2つのコードセグメントが必要
957デフォルトの名無しさん (アウアウウー Sa39-InMM)
2019/08/14(水) 17:58:59.46ID:8Ip/utt6a958デフォルトの名無しさん (ワッチョイ 9501-xky6)
2019/08/14(水) 18:05:09.36ID:WgtMp1yE0 おまいら詳しいな
いつも煽るだけのジジイとは大違いだ
いつも煽るだけのジジイとは大違いだ
959デフォルトの名無しさん (ワッチョイ 45ab-dKkF)
2019/08/14(水) 18:23:42.77ID:5CXVdP5r0 仮装はドレスって何よって空目した
960デフォルトの名無しさん (ワッチョイ a9ad-bVxB)
2019/08/17(土) 06:23:28.66ID:Zf+OyZFy0 CPUの振る舞いは、MS-DOS時代から触っていたら、OSを直接触る仕事して無くともそれなりに身に付く知識。
90年代の雑誌の記事とか、今見返すと結構適当な言い回しがおおいかなー。
90年代の雑誌の記事とか、今見返すと結構適当な言い回しがおおいかなー。
961デフォルトの名無しさん (ワッチョイ 2b82-9R4q)
2019/08/17(土) 14:33:53.72ID:1OZ5Sjcw0 設計から組み込みの部門に転籍したいんやけど応用情報取ればアピールになる?
962デフォルトの名無しさん (ワッチョイ d901-KVZO)
2019/08/17(土) 14:38:02.51ID:5o1qwOfF0964デフォルトの名無しさん (ワッチョイ 2b82-9R4q)
2019/08/17(土) 15:13:05.00ID:1OZ5Sjcw0 >>962
うるせーハゲ質問に答えろハゲ
うるせーハゲ質問に答えろハゲ
965デフォルトの名無しさん (ワッチョイ 2b82-9R4q)
2019/08/17(土) 15:13:17.45ID:1OZ5Sjcw0 >>963
サンキュー行ってくるわ
サンキュー行ってくるわ
966デフォルトの名無しさん (ワッチョイ d901-KVZO)
2019/08/17(土) 15:20:15.01ID:5o1qwOfF0967デフォルトの名無しさん (ワッチョイ 1301-wrC8)
2019/08/17(土) 16:42:17.15ID:kME64/ZP0 >>961
アマチュアなので業界のことはよくわかりませんが、私の経験では応用情報なんて準備なしでもサクサク合格できる非常に簡単な試験だったので
そんな馬鹿でも取れる試験を通ったところで、他人様にアピールできる要素なんて皆無だと思います
まあ取らないよりはましかもしれませんが、とったところで、どうということもないかと
アマチュアなので業界のことはよくわかりませんが、私の経験では応用情報なんて準備なしでもサクサク合格できる非常に簡単な試験だったので
そんな馬鹿でも取れる試験を通ったところで、他人様にアピールできる要素なんて皆無だと思います
まあ取らないよりはましかもしれませんが、とったところで、どうということもないかと
969デフォルトの名無しさん (ワッチョイ 39f6-g2bq)
2019/08/17(土) 16:59:25.44ID:m0TaYC720 資格を取るより、何か作ったほうがいい
それは何かを他人に説明できるものをな
最後までやり遂げるやつってアピールになる
それは何かを他人に説明できるものをな
最後までやり遂げるやつってアピールになる
970デフォルトの名無しさん (ワッチョイ 2b82-9R4q)
2019/08/17(土) 18:18:25.12ID:1OZ5Sjcw0 >>966
うるせーハゲ
うるせーハゲ
971デフォルトの名無しさん (アウアウウー Sa5d-9R4q)
2019/08/17(土) 18:26:43.42ID:iM/i00oRa >>968
馬鹿でも取れる資格で合格率2割か…世の中は馬鹿ばっかりと思ってる仕事できない人ですか?
馬鹿でも取れる資格で合格率2割か…世の中は馬鹿ばっかりと思ってる仕事できない人ですか?
972デフォルトの名無しさん (ワッチョイ 29a0-dCD9)
2019/08/17(土) 18:44:53.30ID:z2aQSF8W0 隙あらば自分語り
しかも応用情報所持者は馬鹿ときたもんだ
5chでコテハン付けてる人間にはろくなのが居ないのが良く分かるわ
しかも応用情報所持者は馬鹿ときたもんだ
5chでコテハン付けてる人間にはろくなのが居ないのが良く分かるわ
973デフォルトの名無しさん (ワッチョイ d352-+XXD)
2019/08/17(土) 18:58:47.65ID:WCU4L4CL0 >>972
コテハンじゃありません、トリップです(霧)
コテハンじゃありません、トリップです(霧)
976デフォルトの名無しさん (ワッチョイ d901-KVZO)
2019/08/17(土) 19:16:49.07ID:5o1qwOfF0977デフォルトの名無しさん (アウアウカー Sa15-5Ve3)
2019/08/17(土) 19:48:38.79ID:W0yISC1Ja 普段、eclipseでコード書いてるんだが実行環境を使わずにプログラムを動かしたいんだいんだ。
どうすれば良い?
どうすれば良い?
978デフォルトの名無しさん (ラクッペ MMa5-wDyD)
2019/08/17(土) 19:54:59.62ID:G9Jg/NxrM 実行環境が曖昧過ぎ
979デフォルトの名無しさん (ワッチョイ 5995-dCD9)
2019/08/17(土) 19:59:53.93ID:He41kTu90 https://paiza.io/ja
この類を使うとか?
この類を使うとか?
980さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-XbXL)
2019/08/17(土) 20:07:35.05ID:hkO+8710d オンラインコンパイラーで検索。
981デフォルトの名無しさん (スップ Sd73-8mFv)
2019/08/17(土) 21:57:43.31ID:Gq1G0TGXd コンピューターサイエンスの勉強に最適な言語ってCですか?
雰囲気でPythonやらGoを実務で使ってるのでもっと核を学びたいのです
雰囲気でPythonやらGoを実務で使ってるのでもっと核を学びたいのです
982さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-XbXL)
2019/08/17(土) 22:04:17.39ID:hkO+8710d >>981
アセンブリとCをやって、OS自作し、機械語を読めるくらいになったら間違いない。ただし、アセンブリやるならCPUの種類は選べ。マイナーなCPUを勉強しても役に立たない。
アセンブリとCをやって、OS自作し、機械語を読めるくらいになったら間違いない。ただし、アセンブリやるならCPUの種類は選べ。マイナーなCPUを勉強しても役に立たない。
983デフォルトの名無しさん (ワッチョイ 1379-dCD9)
2019/08/17(土) 22:05:10.03ID:RvVfsurb0 低レベルの勉強がしたいならアセンブラ
もっと低レベルなことがしたいならはんだごて買ってきて論理回路を勉強すべき
もっと低レベルなことがしたいならはんだごて買ってきて論理回路を勉強すべき
984デフォルトの名無しさん (スッップ Sd33-8mFv)
2019/08/17(土) 22:11:48.46ID:aitIb0FAd985デフォルトの名無しさん (ワッチョイ 1379-dCD9)
2019/08/17(土) 22:14:40.96ID:RvVfsurb0 業務で使ってるのが高級アセンブラじゃなくて
モダンな高級言語なら業務の役には立たないだろうな
デザインパターンやプログラム以外の知識を真面目に学んだ方が業務の役には立つぞ
モダンな高級言語なら業務の役には立たないだろうな
デザインパターンやプログラム以外の知識を真面目に学んだ方が業務の役には立つぞ
986さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-XbXL)
2019/08/17(土) 22:17:08.29ID:hkO+8710d >>984
大規模開発やりたいか、小規模開発やりたいかによる。大規模開発ならオブジェクト指向とか上流のシステム設計とかの高レベルの視点が必要になる。
大規模開発やりたいか、小規模開発やりたいかによる。大規模開発ならオブジェクト指向とか上流のシステム設計とかの高レベルの視点が必要になる。
987デフォルトの名無しさん (ワッチョイ 1379-dCD9)
2019/08/17(土) 22:20:20.48ID:RvVfsurb0 小規模でも継続して開発するなら開発手法や設計の知識がないと全てがスパゲティになるぞ
988デフォルトの名無しさん (ワッチョイ 51b0-dCD9)
2019/08/17(土) 22:21:39.58ID:CuykVau60 コンピュータサイエンス学ぶのにアセンブラと言ったらまずはMMIXだろう。
989デフォルトの名無しさん (スッップ Sd33-8mFv)
2019/08/17(土) 22:22:45.34ID:iu5AFmQqd990デフォルトの名無しさん (ワッチョイ 1379-dCD9)
2019/08/17(土) 22:27:25.97ID:RvVfsurb0 パフォーマンスの良いコード書きたいなら
現実的には使ってる言語の仕様を深く理解する方が先
現実的には使ってる言語の仕様を深く理解する方が先
>>982
アセンブラをやれる手軽な環境ってありますかね…
gcc のインラインくらいしか思いつかない
そもそも、アセンブラ記述が効果的なアルゴリズムってありますかね…
キャリーフラグを触れるメリットが生かせるのは多桁長演算くらいしか思いつきません
アセンブラをやれる手軽な環境ってありますかね…
gcc のインラインくらいしか思いつかない
そもそも、アセンブラ記述が効果的なアルゴリズムってありますかね…
キャリーフラグを触れるメリットが生かせるのは多桁長演算くらいしか思いつきません
>>988
クヌース臭くてちょっち引きます…
クヌース臭くてちょっち引きます…
993さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-XbXL)
2019/08/17(土) 22:36:17.56ID:hkO+8710d 今からアセンブラやるなら、gasかnasmが移植性が高く手頃だと思う。
OSのカーネルではCかアセンブラじゃないと信頼できない。割り込みはアセンブラじゃないと記述できないことがある。
OSのカーネルではCかアセンブラじゃないと信頼できない。割り込みはアセンブラじゃないと記述できないことがある。
994さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-XbXL)
2019/08/17(土) 22:50:13.63ID:hkO+8710d Java仮想マシンのバイトコードも仮想アセンブラの一種と言えるのではないか。
最近ではLLVMというコンパイラ技術基盤があって、それを使えば仮想アセンブラというか中間言語でも高レベルの最適化ができる。
あくまで仮想だから本当のアセンブラとは言えない。
最近ではLLVMというコンパイラ技術基盤があって、それを使えば仮想アセンブラというか中間言語でも高レベルの最適化ができる。
あくまで仮想だから本当のアセンブラとは言えない。
995デフォルトの名無しさん (アウアウカー Sa15-tMJO)
2019/08/17(土) 22:56:25.40ID:mO2DYsgBa 低レイヤやってきたおっさんのスタンスは「動けばなんでもいい」が普通なので、なるべく同じ道は進んで欲しくない
996デフォルトの名無しさん (ワッチョイ 8b63-dCD9)
2019/08/17(土) 22:59:12.98ID:gRAatMdn0 仮想アセンブラなんて言葉は、初めて聞いた
違和感ありすぎる
違和感ありすぎる
998デフォルトの名無しさん (ワッチョイ 33ba-LL4R)
2019/08/17(土) 23:03:01.96ID:tN5mSQYg0 C言語なら俺に聞け 153
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
999デフォルトの名無しさん (ワッチョイ 29a0-R2Ej)
2019/08/18(日) 01:31:11.17ID:0XNdGcXI0 やっぱコテハンってゴミだな
1000さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-XbXL)
2019/08/18(日) 01:43:12.61ID:f2ZPM7Xhd 五チャンネルの株式総会はこれで閉会と致します。お疲れ様でした。
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 61日 7時間 16分 2秒
新しいスレッドを立ててください。
life time: 61日 7時間 16分 2秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【野球】野球の未来に危機感「マイナースポーツになる」 宮本慎也氏が開催…学童大会 [尺アジ★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【訃報】声優・西村知道さん死去 「SLAM DUNK」安西先生役 9月に体調不良のため一時休業 [少考さん★]
- 中国「日本のネトウヨを根絶してやるからな」。ネトウヨ、人生が終わる [805596214]
- お前らってヘアオイル何使ってるの?
- (´・ω・`)刑務所での暮らしwwwwwwwwwwwwwwww
- 尖閣はどう考えても絶対防衛線内
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 【速報】高市早苗、起床 [779938112]
