!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.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/
※前スレ
C言語なら俺に聞け 161
https://mevius.5ch.net/test/read.cgi/tech/1682053520/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 162
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2389-FUJr)
2023/10/30(月) 17:13:00.82ID:hHEGE8Ol0203デフォルトの名無しさん (ワッチョイ 71cf-Gt6m)
2023/12/07(木) 16:19:14.82ID:QzDrEJVi0 >>196
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな
204デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/07(木) 16:23:44.20ID:5AmCTrxW0 >グラフィック系のソフトを使う上で不便なところを楽したい
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん
205はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/07(木) 17:03:32.49ID:FWY3NSUg0 >>196
具体的に対象になってるソフトの名前は言える?
モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)
ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。
もしも外部に対してインターフェイスを用意していないなら
ボタン操作のイベントを発生させるとかして制御する (つまりまさに人がする操作を代行させる) ということも可能だが、
それを可能にするような基礎技術というか Windows の動作モデルを理解したいのなら
「猫でもわかるWindowsプログラミング」はそれなりに有用だと思うよ。
私は書籍を読んだことは無いけどウェブ版は Windows がイベントを伝播させて操作させる構造を理解するのに十分な記述はある。
だけど、人が操作するときに Windows の中で何が起こっているのかを
初心者が根本から理解してきちんと使いこなせるまでになるハードルは割と高めなんだよ……。
Power Automate Desktop なら技術の根本を理解せずともそれが出来るようになってるし、
マイクロソフトが直接に提供していてしかも無料という神ソフトなのでオススメした次第。
UWSC とか AutoIt なんかも人気があるね。
具体的に対象になってるソフトの名前は言える?
モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)
ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。
もしも外部に対してインターフェイスを用意していないなら
ボタン操作のイベントを発生させるとかして制御する (つまりまさに人がする操作を代行させる) ということも可能だが、
それを可能にするような基礎技術というか Windows の動作モデルを理解したいのなら
「猫でもわかるWindowsプログラミング」はそれなりに有用だと思うよ。
私は書籍を読んだことは無いけどウェブ版は Windows がイベントを伝播させて操作させる構造を理解するのに十分な記述はある。
だけど、人が操作するときに Windows の中で何が起こっているのかを
初心者が根本から理解してきちんと使いこなせるまでになるハードルは割と高めなんだよ……。
Power Automate Desktop なら技術の根本を理解せずともそれが出来るようになってるし、
マイクロソフトが直接に提供していてしかも無料という神ソフトなのでオススメした次第。
UWSC とか AutoIt なんかも人気があるね。
206デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 17:15:58.47ID:ggcXWkJv0 関数のサイズというのは、関数の引数のサイズと同じと考えて良いのでしょうか?
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?
構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?
構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・
207デフォルトの名無しさん (ワッチョイ f1bb-Gt6m)
2023/12/07(木) 17:18:59.29ID:Dmh4B19g0 プリプロセッサメタプログラミングを覚えてからc言語の開発は楽になったわ
前は同じようなデータ構造でたくさんモジュール作ってたからな
前は同じようなデータ構造でたくさんモジュール作ってたからな
208はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/07(木) 17:34:07.95ID:FWY3NSUg0 >>206
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。
関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。
もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。
関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。
もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。
209デフォルトの名無しさん (ワッチョイ 915b-rn9t)
2023/12/07(木) 17:41:37.50ID:VEE9aIzl0210デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 17:41:59.31ID:ggcXWkJv0 >>208
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます
211デフォルトの名無しさん (ワッチョイ 1ec3-yDrh)
2023/12/07(木) 18:04:20.91ID:Kvlx+aNw0 >>206
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする
212デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/07(木) 18:19:55.87ID:5AmCTrxW0 サイズ云々は
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?
こういう思考の流れかな?
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?
こういう思考の流れかな?
213デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 19:14:37.61ID:ggcXWkJv0214デフォルトの名無しさん (ワッチョイ 8a71-yDrh)
2023/12/07(木) 19:46:05.37ID:Avn/NPEq0 >>213
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト
仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト
仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね
215デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 19:58:53.01ID:ggcXWkJv0 >>214
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・
216デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/07(木) 21:12:50.21ID:fQltjmnX0 void*使えるやん
217デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
2023/12/07(木) 21:34:16.53ID:NYiehhGh0218はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 656b-1gjz)
2023/12/08(金) 03:48:38.29ID:tzfGEsy80 >>216
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。
219デフォルトの名無しさん (ワッチョイ b501-8qzv)
2023/12/08(金) 06:53:57.90ID:Mdse7dEX0220デフォルトの名無しさん (ワッチョイ 1e6d-ja4y)
2023/12/08(金) 07:01:37.37ID:g0YSKcXt0 near ポインタモデル?だったかの
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ
221デフォルトの名無しさん (ラクッペペ MM3e-VttM)
2023/12/08(金) 07:38:56.35ID:qsjd2ZYcM ミディアムモデルとかコンパクトモデルとか
まぁ過去の話だわな
まぁ過去の話だわな
222デフォルトの名無しさん (スップ Sdea-b4p5)
2023/12/08(金) 07:57:53.16ID:m+qJyEe4d 関数のサイズは関数のポインタをアドレス順にソートすれば求められる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる
223デフォルトの名無しさん (スップ Sd0a-Cw2Y)
2023/12/08(金) 08:01:58.55ID:ClTGg8d6d224はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 09:53:49.26ID:B2zBKDAb0 >>217
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
https://learn.microsoft.com/ja-jp/windows/win32/
Win32 API は C で使ってもそんなに不便ではないように出来てる。
特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/your-first-windows-program
必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
学習量をこなすには時間をかけるしかしょうがない。
やりたいことを自由に出来るようになるまで何も生産しない時間 (業務なら人件費に換算されるだろう) をかける余裕があるの?
というところを不安に思っちゃうわけだよ。
ここは C スレだから C プログラミングを支援したい気持ちはあるがそれがしんどい場合も多いってことも知ってる。
個人事業なら趣味と兼ねるのもアリかもしんないけど。
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
https://learn.microsoft.com/ja-jp/windows/win32/
Win32 API は C で使ってもそんなに不便ではないように出来てる。
特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/your-first-windows-program
必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
学習量をこなすには時間をかけるしかしょうがない。
やりたいことを自由に出来るようになるまで何も生産しない時間 (業務なら人件費に換算されるだろう) をかける余裕があるの?
というところを不安に思っちゃうわけだよ。
ここは C スレだから C プログラミングを支援したい気持ちはあるがそれがしんどい場合も多いってことも知ってる。
個人事業なら趣味と兼ねるのもアリかもしんないけど。
225デフォルトの名無しさん (ワッチョイ 6646-wNAC)
2023/12/08(金) 10:13:43.24ID:20YRNN5F0 >>224
Cコンパイラに、C++ -> C トランスレート機能あるの?
Cコンパイラに、C++ -> C トランスレート機能あるの?
226デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/08(金) 10:26:10.76ID:vLixVDpZ0 API はほとんど C インターフェースで
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない
(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない
(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)
227デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/08(金) 10:34:54.49ID:faKtyhh20 >>218
ねえよ
ねえよ
228デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 10:50:23.47ID:k3Bpg+TDa ぶっちゃけGDI+もCから使えるけどね
229デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/08(金) 10:53:01.67ID:vLixVDpZ0 >>228
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?
230デフォルトの名無しさん (ワッチョイ b501-8qzv)
2023/12/08(金) 11:03:20.25ID:Mdse7dEX0 >>220-221
なんかそういうのあったかも
なんかそういうのあったかも
231デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 11:04:41.36ID:VEgZ7oNC0 あれはPascalの呼出ではなかったかな
232はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 11:27:29.89ID:B2zBKDAb0233デフォルトの名無しさん (ワッチョイ 6548-WD8q)
2023/12/08(金) 12:03:08.97ID:7hcazM9a0 >>224
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。
知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。
知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。
234デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 12:17:34.25ID:k3Bpg+TDa Win32APIというよりそれ以前の
C言語の知識が足りてないんじゃないのかな
C言語の知識が足りてないんじゃないのかな
235はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 13:05:38.60ID:B2zBKDAb0 >>233
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。
私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。
私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。
236デフォルトの名無しさん (ワッチョイ 8a80-yDrh)
2023/12/08(金) 13:11:55.82ID:0BufPgxy0 さてはオメー
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?
237デフォルトの名無しさん (アウアウウー Sa21-/D3x)
2023/12/08(金) 13:15:41.58ID:o54AonyOa >>206
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?
238デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 13:31:18.44ID:k3Bpg+TDa >>236
なんちゃらGPTがここでこっそり質問してたら笑う
なんちゃらGPTがここでこっそり質問してたら笑う
239デフォルトの名無しさん (ワッチョイ 66cf-tBUZ)
2023/12/08(金) 13:36:30.72ID:SLmq2FCH0240デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/08(金) 15:42:45.24ID:faKtyhh20 だからねえよ
そいつが勘違いしてるか、使い方が悪いかだろ
そいつが勘違いしてるか、使い方が悪いかだろ
241デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
2023/12/08(金) 16:03:05.13ID:abnVL6FT0 >>206
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ
242デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 16:08:12.70ID:k3Bpg+TDa 関数を malloc で確保するにはどうすれば良いですか?って言いそう
243デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
2023/12/08(金) 16:21:49.56ID:abnVL6FT0 ちなみにメモリにロードされた関数の領域は現代のOSならば当然ながらアクセス不可能
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが
244デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
2023/12/08(金) 16:24:27.68ID:abnVL6FT0 ちなみにメモリ領域にマシンコードを生成してそのメモリ領域のマシンコードを即時実行するということはできる
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ
245デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 16:31:30.89ID:VEgZ7oNC0 メモリ保護機構が動いて実行できないと思う
16ビットリアルモードOSだったらできたと思うが
16ビットリアルモードOSだったらできたと思うが
246デフォルトの名無しさん (スッップ Sd0a-GtvU)
2023/12/08(金) 16:51:01.76ID:9cA1ls6dd mprotectとかVirtualProtectで実行可能にすればできる
247デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 17:06:26.65ID:VEgZ7oNC0 しかし、それだと任意のコード実行が自由自在ってことになって・・・
まずくない?
まずくない?
248はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 17:24:04.59ID:B2zBKDAb0249はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 17:24:33.32ID:B2zBKDAb0250デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 17:35:36.56ID:VEgZ7oNC0 セキュリティって、身内も信じちゃまずいと思うよ
251デフォルトの名無しさん (ワッチョイ eaad-snvD)
2023/12/08(金) 20:25:30.65ID:Bb4hYLfH0252デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 20:31:27.89ID:VEgZ7oNC0 企業でもそうなんですか?
管理者が望んでいないプログラムが動かせたら困るでしょう
管理者自身がやるってならちょっと違いますが
管理者が望んでいないプログラムが動かせたら困るでしょう
管理者自身がやるってならちょっと違いますが
253デフォルトの名無しさん (ワッチョイ eaad-snvD)
2023/12/08(金) 20:41:26.51ID:Bb4hYLfH0254はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 20:48:50.56ID:B2zBKDAb0 ???
私の理解だと >>247 は「機械語をその場で生成して即時実行するのって危なくないの?」という話だと思ってたんだけど違うの?
そういう理解だったから実行の許可を出す (メモリの実行可能属性を ON にする API を呼び出す) ことなく実行できない、
プログラマの意図しない実行は防がれるということを応えたつもりだったんだけど、運用の話なの???
「身内」ってのは「プログラムの中での機械語生成にミスったらめっちゃ暴走するやん?」という意味かと思ったけど
運用にかかわる人物という意味?
私の理解だと >>247 は「機械語をその場で生成して即時実行するのって危なくないの?」という話だと思ってたんだけど違うの?
そういう理解だったから実行の許可を出す (メモリの実行可能属性を ON にする API を呼び出す) ことなく実行できない、
プログラマの意図しない実行は防がれるということを応えたつもりだったんだけど、運用の話なの???
「身内」ってのは「プログラムの中での機械語生成にミスったらめっちゃ暴走するやん?」という意味かと思ったけど
運用にかかわる人物という意味?
255デフォルトの名無しさん (ワッチョイ ea79-4utE)
2023/12/08(金) 21:24:15.38ID:8rS6bPls0 >>225
C++黎明期はC++トランスレーター付きのCを普通に使わされたもんだよ
C++黎明期はC++トランスレーター付きのCを普通に使わされたもんだよ
256デフォルトの名無しさん (スップ Sdbf-MP5X)
2023/12/09(土) 07:42:54.58ID:Z2D8kHNzd >>250
それなら自作のプログラムをコンパイルして実行できる環境がすでにまずいだろw
パソコンをゲーム機みたいにしたいのかい
読み書きできるメモリを実行可能属性にできるというだけで
書き込み不可能なシステムメモリに書き込めるようにできるわけではない
それなら自作のプログラムをコンパイルして実行できる環境がすでにまずいだろw
パソコンをゲーム機みたいにしたいのかい
読み書きできるメモリを実行可能属性にできるというだけで
書き込み不可能なシステムメモリに書き込めるようにできるわけではない
257デフォルトの名無しさん (ワッチョイ ff46-vhj2)
2023/12/09(土) 08:06:29.62ID:NnZXyC0n0 本日のWebは、
・帝乃三姉妹は案外、チョロい。 → 本誌で既読
・レッドブルー → 本誌で既読
・からかい上手の高木さん → ゲッサンで既読
どうにかしてよ、A立。たとえば響5巻無料Webでもとか。
そういえば、高木さんの人の将棋のやつ、マガポケでも終わったね。
・帝乃三姉妹は案外、チョロい。 → 本誌で既読
・レッドブルー → 本誌で既読
・からかい上手の高木さん → ゲッサンで既読
どうにかしてよ、A立。たとえば響5巻無料Webでもとか。
そういえば、高木さんの人の将棋のやつ、マガポケでも終わったね。
258デフォルトの名無しさん (ワッチョイ 97cf-TEND)
2023/12/09(土) 08:12:11.03ID:zYR2UmFI0 いわゆるroot権限が必要な行為は実行出来ないね
でも、mprotectの説明によると
> 注意
Linux では、(カーネル vsyscall 領域以外の) 任意のプロセスアドレス空間において mprotect ()を呼び出すことが、常に許されている。
となってるから、Node.js(node)とかJITを行うプログラムがユーザー権限で動くのだろう
単に利便性の為だろう
でも、mprotectの説明によると
> 注意
Linux では、(カーネル vsyscall 領域以外の) 任意のプロセスアドレス空間において mprotect ()を呼び出すことが、常に許されている。
となってるから、Node.js(node)とかJITを行うプログラムがユーザー権限で動くのだろう
単に利便性の為だろう
259デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
2023/12/12(火) 20:44:31.35ID:3wiw5swR0 staticグローバル変数を含んだ動的ライブラリーを動的リンクをする場合はグローバル変数が初期化されるのはmain実行前の認識です。
同じプロセス内で再度初期化したい場合は別途初期化の関数を用意してないと不可能でしょうか?
動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
同じプロセス内で再度初期化したい場合は別途初期化の関数を用意してないと不可能でしょうか?
動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
260デフォルトの名無しさん (ワッチョイ d701-Qbcu)
2023/12/12(火) 21:01:30.67ID:bMo3JLCK0 >>259
やってみれば?
やってみれば?
261デフォルトの名無しさん (ワッチョイ 17f1-tASO)
2023/12/12(火) 21:15:07.81ID:6C/zc+S/0 明示的に初期化処理を書くのが吉
262デフォルトの名無しさん (ワッチョイ d701-Qbcu)
2023/12/12(火) 21:58:30.38ID:bMo3JLCK0 >>259
>動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
Linuxの場合には初期化されたけど環境依存かも?
$ cat hoge.c hage.c
#include <stdio.h>
static int a = 100;
void increament_a () {++ a;}
void print_a () {printf ("%d\n", a);}
#include <dlfcn.h>
typedef void (*Func) ();
int main () {
void *handle;
Func func;
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
func = (Func)dlsym (handle, "increament_a");
(*func) ();
func = (Func)dlsym (handle, "print_a");
(*func) ();
dlclose (handle);
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
return 0;
}
$ gcc -shared -fPIC -o libhoge.so hoge.c
$ gcc -o hage hage.c
$ LD_LIBRARY_PATH=.; ./hage
100
101
100
>動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
Linuxの場合には初期化されたけど環境依存かも?
$ cat hoge.c hage.c
#include <stdio.h>
static int a = 100;
void increament_a () {++ a;}
void print_a () {printf ("%d\n", a);}
#include <dlfcn.h>
typedef void (*Func) ();
int main () {
void *handle;
Func func;
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
func = (Func)dlsym (handle, "increament_a");
(*func) ();
func = (Func)dlsym (handle, "print_a");
(*func) ();
dlclose (handle);
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
return 0;
}
$ gcc -shared -fPIC -o libhoge.so hoge.c
$ gcc -o hage hage.c
$ LD_LIBRARY_PATH=.; ./hage
100
101
100
263デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
2023/12/12(火) 22:04:40.47ID:3wiw5swR0264デフォルトの名無しさん (ワッチョイ 17f1-tASO)
2023/12/12(火) 22:10:06.55ID:6C/zc+S/0 初期値代入くらい書くだろ普通
処理系によっちゃ不定な値から始まったりするのを防ぐ為にさ
処理系によっちゃ不定な値から始まったりするのを防ぐ為にさ
265デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
2023/12/12(火) 22:18:02.98ID:3wiw5swR0266はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5705-ZkkM)
2023/12/12(火) 22:18:21.71ID:Kje9ktjN0267はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5705-ZkkM)
2023/12/12(火) 22:39:58.31ID:Kje9ktjN0 >>264
言語仕様的にはグローバル変数 (記憶域期間が static) が不定になったりはしないことになっている (初期化子がなければゼロで初期化する) のでまともな開発環境があるところではそんな心配はしないよ。
心配が必要になるほど不確かな処理系しかない (または初期化処理も自分でかかなきゃいけないような低レイヤ) 分野もあるのは知ってるけどそれが普通ってことはない。
言語仕様的にはグローバル変数 (記憶域期間が static) が不定になったりはしないことになっている (初期化子がなければゼロで初期化する) のでまともな開発環境があるところではそんな心配はしないよ。
心配が必要になるほど不確かな処理系しかない (または初期化処理も自分でかかなきゃいけないような低レイヤ) 分野もあるのは知ってるけどそれが普通ってことはない。
268デフォルトの名無しさん (ワッチョイ 9f79-1KRD)
2023/12/12(火) 23:05:45.63ID:I4UWTUvH0 >>267
言語仕様ではなく2度目のdlopenの初期化の話なんだからドキュメント化されてないなら何の保証もないでしょ
言語仕様ではなく2度目のdlopenの初期化の話なんだからドキュメント化されてないなら何の保証もないでしょ
269はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f3e-ZkkM)
2023/12/12(火) 23:55:24.16ID:skpldDGw0 >>268
そういう意味で言ってたのならわかる。
「どうして元から代入する処理を入れてなかった?それが普通だろ?」というニュアンスで受け取ってたから元は dlopen しなおしで対処する想定ではなかったからそういうことを心配してなかった (する必要がなかった) という反応になった。
そういう意味で言ってたのならわかる。
「どうして元から代入する処理を入れてなかった?それが普通だろ?」というニュアンスで受け取ってたから元は dlopen しなおしで対処する想定ではなかったからそういうことを心配してなかった (する必要がなかった) という反応になった。
270デフォルトの名無しさん (ワッチョイ 37f2-YdMO)
2023/12/15(金) 08:29:58.25ID:a4YsmFKj0 板の名前変わった?
271デフォルトの名無しさん (ワッチョイ 6bbb-/1Gs)
2023/12/17(日) 18:23:47.21ID:kc2HrTf20 ポインタ変数にアドレスを代入するのはシャローコピーと言えると思いますか?
char s[] = "abc";
char *p = s; // shallow copy
char s[] = "abc";
char *p = s; // shallow copy
272デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/17(日) 18:40:34.16ID:i7ihHaq10 果たしてコピーと呼んで良い操作ナノか
273デフォルトの名無しさん (ワッチョイ 1e5f-DkQ9)
2023/12/17(日) 19:27:43.64ID:mH/O4qym0 >>271
言えません
言えません
274デフォルトの名無しさん (ワッチョイ e34d-e8vO)
2023/12/17(日) 19:32:39.54ID:MfQY7qyQ0 >>273
?
?
275デフォルトの名無しさん (ワッチョイ cb62-dXDU)
2023/12/17(日) 22:10:52.33ID:UmzU+/ux0 シャローコピーはディープコピーと並べて語るときに区別するための用語であって、
代入は普通に代入と呼ぶのが、コミュニケーションにおいて適切だ、
と、自分が聞かれた場合なら答えるし、レビュー依頼された場合なら指摘します
代入は普通に代入と呼ぶのが、コミュニケーションにおいて適切だ、
と、自分が聞かれた場合なら答えるし、レビュー依頼された場合なら指摘します
276デフォルトの名無しさん (ワッチョイ e34d-e8vO)
2023/12/18(月) 00:59:34.37ID:Mvyif4Hn0 >>275
シャローコピーと言えると思いますか?
シャローコピーと言えると思いますか?
277デフォルトの名無しさん (ワッチョイ e34d-e8vO)
2023/12/18(月) 00:59:46.13ID:Mvyif4Hn0 指摘する前に答えろよ無能
278デフォルトの名無しさん (ワッチョイ 63c9-/1Gs)
2023/12/18(月) 02:31:45.63ID:BtLCMjh/0 シャローコピーでしょ
2つのポインタが同じ内容になってる訳だから
ちなみに、変数定義時の代入文はバインド(束縛する)と言った方が適切だな
2つのポインタが同じ内容になってる訳だから
ちなみに、変数定義時の代入文はバインド(束縛する)と言った方が適切だな
279デフォルトの名無しさん (ワッチョイ dee7-DkQ9)
2023/12/18(月) 09:17:00.35ID:qIC94rZG0 >>276
言えません
言えません
280デフォルトの名無しさん (ワッチョイ 16ab-zIzn)
2023/12/18(月) 09:38:52.52ID:RUscEa1Z0 シャローコピーの要件からすると
ポインタ変数にアドレスを代入するだけでは成立せずに
リファレンス可能なオブジェクトを指してるポインタでないとまずい気がする
char *p = (char *)0x000; /* アドレスを代入してるぞ */
ポインタ変数にアドレスを代入するだけでは成立せずに
リファレンス可能なオブジェクトを指してるポインタでないとまずい気がする
char *p = (char *)0x000; /* アドレスを代入してるぞ */
281デフォルトの名無しさん (ワッチョイ 6bbb-/1Gs)
2023/12/18(月) 10:45:42.59ID:RHsCrDES0 意見分かれますね
ではstrdupはディープコピーだと言えますか?
ではstrdupはディープコピーだと言えますか?
282デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/18(月) 10:52:49.41ID:kauj19Ts0 C言語にはオブジェクトと言う概念がないからなあ
お気持ちとしてどうかと聞かれれば、人それぞれで
お気持ちとしてどうかと聞かれれば、人それぞれで
283デフォルトの名無しさん (ワッチョイ efc0-UNLj)
2023/12/18(月) 10:54:27.09ID:PYgWDYAB0 いやそれぬるぽ
284デフォルトの名無しさん (ワッチョイ d663-/1Gs)
2023/12/18(月) 12:07:36.53ID:ccgmPeZz0285はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d23e-/274)
2023/12/18(月) 12:57:51.87ID:vbeDxg2G0 それは C の概念モデルを前提にしていいだろ。
286デフォルトの名無しさん (ワッチョイ 16ab-zIzn)
2023/12/18(月) 14:16:20.90ID:RUscEa1Z0 C++ の 参照だったら概念含めてそのまんまだったんだろうな
int a;
int& b = a;
int a;
int& b = a;
287デフォルトの名無しさん (ワッチョイ 12ad-9NgZ)
2023/12/18(月) 14:52:23.89ID:kcYk1zSZ0 >>271
言えると思う。
言えると思う。
288デフォルトの名無しさん (スフッ Sd32-3CSV)
2023/12/18(月) 16:19:13.36ID:xiaHc48Fd 内容が値を表すメモリの位置 = オブジェクト
289デフォルトの名無しさん (ワッチョイ cb62-dXDU)
2023/12/18(月) 17:05:11.17ID:pYYMlhZJ0290デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/18(月) 17:09:52.77ID:kauj19Ts0 代入元の配列がスタック上なのかどうか、そちらの方がC言語的には重要
291デフォルトの名無しさん (ワッチョイ 16ab-zIzn)
2023/12/18(月) 17:12:05.22ID:RUscEa1Z0 関数内の自動変数へのポインタを関数の外へ持ち出したりすると…
292デフォルトの名無しさん (ワッチョイ 5f01-3PPy)
2023/12/18(月) 18:48:36.94ID:epkANb1d0 何かのポインタをメンバに持つ構造体の実体の複写
293デフォルトの名無しさん (ワッチョイ d663-/1Gs)
2023/12/18(月) 23:27:08.16ID:ccgmPeZz0294デフォルトの名無しさん (ワッチョイ 16cf-fH6R)
2023/12/18(月) 23:33:27.08ID:a4PUOo8N0 コピーには違いないけどディープとかシャローとか区別できるものじゃないってことだろ
295デフォルトの名無しさん (ワッチョイ 1279-F8eA)
2023/12/18(月) 23:40:20.33ID:6hD73gHu0296デフォルトの名無しさん (ワッチョイ 4b46-AQ+F)
2023/12/19(火) 08:23:42.15ID:ijJJQ5/r0297デフォルトの名無しさん (スププ Sd32-3CSV)
2023/12/19(火) 09:34:26.09ID:+6PK9xZxd シャローコピーとかディープコピーとかはもともとPythonの概念ですよね?
298デフォルトの名無しさん (ワッチョイ 2701-NGr8)
2023/12/19(火) 09:54:57.24ID:hCROhcq70 は?
299デフォルトの名無しさん (ワッチョイ 2701-3PPy)
2023/12/19(火) 10:05:08.86ID:cwbunCZy0 >>289
馬鹿ってすぐ断定するよな
馬鹿ってすぐ断定するよな
300デフォルトの名無しさん (ワッチョイ 77cd-UNLj)
2023/12/19(火) 10:07:03.49ID:KoTx3gw20 コピーとクローンは違うよな?
301デフォルトの名無しさん (ラクッペペ MMde-Y9Ov)
2023/12/19(火) 10:13:44.25ID:MIravlrKM >>297
C++やJavaあたりが元だと思うけど
C++やJavaあたりが元だと思うけど
302デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/19(火) 10:17:05.18ID:gboy58yC0 そういうことで、
Cにはシャローコピーとかディープコピーとかの概念はない
Cにはシャローコピーとかディープコピーとかの概念はない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 「アベノミクス」で投資対象と化したマンション ローンの低金利続き「年収の12倍」借りる20代出現 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【実況】博衣こよりのえちえち朝こよ🧪 ★2
- 【!?】高市早苗「靖国神社電撃参拝プラン」浮上!これもう戦争だろ… [481941988]
- 【実況】博衣こよりのえちえち朝こよ🧪
- カカロット、腰痛い
- 【超悲報】中国への武力行使、世論調査で「賛成」「どちらかといえば賛成」48.8% 「反対」「どちらかといえば反対」の44.2%を上回る [314039747]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
