C++相談室 part123 [無断転載禁止]©5ch.io
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2016/02/21(日) 16:36:27.08ID:jZESqUY+ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part122
http://peace.2ch.net/test/read.cgi/tech/1453557975/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1439849418/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0809デフォルトの名無しさん
2016/03/31(木) 11:59:17.72ID:4vGs+7xFC言とC++自分で見た感じだと全く違うもののように見えたので、自分で全く意味ないと解釈してました
とりあえず意味があるならC言語のほうが簡単そうなので先にC言語やっちゃいたいと思います。
ありがとうございます
0810デフォルトの名無しさん
2016/03/31(木) 12:10:55.85ID:61JDjacRC++の必要十分な機能を使うだけならCを勉強する必要は無い
正直言って勉強前に見当をつけるのは無理
0811デフォルトの名無しさん
2016/03/31(木) 12:47:15.96ID:4vGs+7xF具体的にありがとうございます
。C++学習の目的はゲームのプログラムを覗いたり色んなツールとか作ってみたいからとかなんですが
何が必要で何が不必要か自分じゃ全く分からないので無難にC言語の基礎くらい覚えてからやった方がいいですよね・・
0812デフォルトの名無しさん
2016/03/31(木) 12:49:42.06ID:ScXuRFRf> スタティックライブラリをリンクしたら素のmallocがそのままくっつくだけだろw
バカなの?
デバッグ版のライブラリとリンクすればいいだけだろ
ライブラリって提供された奴しかダメとか思ってるのか?
> > デバッグ用の API とか使って動的に差し替えるとかもあるし
> だからそれがDLL Injection
違う
DebugActiveProcess とか ptrace を使う話だ
0813デフォルトの名無しさん
2016/03/31(木) 13:01:17.81ID:ScXuRFRfどんなときに使うのか知らんけど
_SYSCRT を定義してライブラリを作ると new で _heap_alloc を呼び出すコードになってるな
Visual Studio Express 2013
0814デフォルトの名無しさん
2016/03/31(木) 13:01:53.14ID:61JDjacR基本だけ抑えて早々に移行するのが良いと思う
C++のどの部分がC由来かが分かるだけで
見通しもかなり良くなるはず
0815デフォルトの名無しさん
2016/03/31(木) 13:10:41.88ID:wytOYZTkデバッグ版のライブラリとリンクするとmallocがどうなるってんだよw
意味不明
> DebugActiveProcess とか ptrace を使う話だ
何言ってんの…馬鹿かよ
DLL Injectionと何の関係があんだよ
論点がずれてるようだがデバッグをするんじゃないだろ
malloc,freeを自前の実装版で捕捉してメモリリークの調査をするっていうながれをずっとしてんだろ
0816デフォルトの名無しさん
2016/03/31(木) 13:14:41.51ID:wytOYZTkとりあえずDebugActiveProcess使ってmallocを自前実装版に差し替える手順を説明しろ
https://msdn.microsoft.com/ja-jp/library/cc428926.aspx
がDebugActiveProcessのリファレンスだがそんな機能は全く無いけどなw
0817デフォルトの名無しさん
2016/03/31(木) 13:46:30.55ID:+VywWLYKPostMessageくんは本当に頭が悪いな。もとのお題はこれだよ。
752 : デフォルトの名無しさん2016/03/30(水) 20:32:04.48 ID:yO7JBNvw
newもdeleteも最終的にはmalloc,freeが呼ばれるからそのライブラリを
自前実装ので横取りして呼ばれた時にコールスタックを歩いて呼び出し元を
特定して保存しておいて、リークしたらそれを表示するのが最強
つうかリーク検出ツールってそんな事してんじゃないかね
ちなみに横取りするのはOS毎にやり方が全然違う
0818デフォルトの名無しさん
2016/03/31(木) 14:03:56.09ID:Sejgg9vlPostMessageの件がなんでお前のトラウマボタンを押しちゃったのか分からないがそろそろ落ち着け
C++のライブラリははnewもmallocも両方サポートする必要があるという状況で
newはmallocを呼び出す薄いラッパーとして実装されるのが自然なのであって
そうじゃない実装なんて見たことない
例外があるなら具体的に挙げてみろと言ってるだけなのだが?
アサッテなものを持ちだしては「証明終了!」とか実にお前らしいなあ
まあ、そういう例外があっても規格に違反してるわけじゃないし、別におかしくはないんだけどね
0819デフォルトの名無しさん
2016/03/31(木) 14:45:20.35ID:yy0681ErC++にはデストラクタがあるから、そこに何かを仕込めそう
一方、Rubyにはデストラクタが無いから、GCのファイナライザーに仕込むしかない
0820デフォルトの名無しさん
2016/03/31(木) 14:50:10.53ID:Dfa8D5EM0821デフォルトの名無しさん
2016/03/31(木) 16:12:26.92ID:Sejgg9vlだから何?わけの分からない粘着君
0822デフォルトの名無しさん
2016/03/31(木) 16:34:41.88ID:7za8ruVEfree(new char); が未定義動作にならないって、どこかに書いてあるのか?
0823デフォルトの名無しさん
2016/03/31(木) 18:44:40.77ID:DVM4CxPR・メモリ不足で死ねない場合はPostMessageを監視する
・早い話valgrindはリーク検出については使いものにならない
・classのデフォルトアクセス範囲をpublicにすべき
・VCでの開発時コンソールプログラムを終了時に待機させるのにCtrl+F5するのはバッドノウハウ
・newもdeleteも最終的にはmalloc,freeが呼ばれるから自前実装で横取りする
ちなみに横取りするのはOS毎にやり方が全然違う
0824デフォルトの名無しさん
2016/03/31(木) 18:45:39.46ID:DVM4CxPR誰か直しといて
0825デフォルトの名無しさん
2016/03/31(木) 19:11:23.53ID:wytOYZTk俺は
ID:yO7JBNvw
ID:wytOYZTk
だぞ。全部抽出してみ、書いてる事は全て正しいよ
0826デフォルトの名無しさん
2016/03/31(木) 19:16:52.76ID:DVM4CxPRわかってる
ぼーっとこぴぺして加工したあとに気がついた
0827デフォルトの名無しさん
2016/03/31(木) 19:17:23.31ID:DVM4CxPRぼーっとしすぎや
0828デフォルトの名無しさん
2016/03/31(木) 19:18:53.02ID:wytOYZTkお前基地害だろ
0829デフォルトの名無しさん
2016/03/31(木) 19:19:33.09ID:2aAx7JX60830デフォルトの名無しさん
2016/03/31(木) 19:21:10.87ID:wytOYZTkこちは真性だろ。本物は初めて見た
0831デフォルトの名無しさん
2016/03/31(木) 19:37:49.81ID:ScXuRFRf> デバッグ版のライブラリとリンクするとmallocがどうなるってんだよ
なんでもやり放題だろ
ライブラリ作ったことないのか?
Visual Studio も GCC/clang もライブラリのソースがあるから malloc/free をラップして確保/解放情報を取得するとか簡単にできる
> > DebugActiveProcess とか ptrace を使う話だ
> DLL Injectionと何の関係があんだよ
DLL Injection と違うって書いてあるのになんの関係ガー
とかバカすぎるだろ w
> 論点がずれてるようだがデバッグをするんじゃないだろ
デバッガーでブレークかけて違う関数呼び出したりできることもご存じない?
> malloc,freeを自前の実装版で捕捉してメモリリークの調査をするっていうながれをずっとしてんだろ
ここだけは合ってるんだな w
0832デフォルトの名無しさん
2016/03/31(木) 19:48:30.56ID:ScXuRFRfホントに応用力ないのな w
DebugActiveProcess でプロセスにアタッチして
WaitForDebugEvent でプロセス一時停止するまで待って
WriteProcessMemory でブレークポイント置いて実行継続
ブレークしたら malloc エミュレートするなりなんでもできるだろ
0833デフォルトの名無しさん
2016/03/31(木) 19:51:31.05ID:wytOYZTk> Visual Studio も GCC/clang もライブラリのソースがあるから malloc/free をラップして確保/解放情報を取得するとか簡単にできる
だからサードパーティ製のようなDLLしかないライブラリを使う場合はどうなるってんだよ
DLL Injectionでmalloc/freeを置き換えるのが不可能だと言いたいのか?
不可能ではなければそれだけで全て事足りるだろ
> DLL Injection と違うって書いてあるのになんの関係ガー
> とかバカすぎるだろ w
> > > デバッグ用の API とか使って動的に差し替えるとかもあるし ← これお前の書き込み
> > だからそれがDLL Injection
> 違う
DebugActiveProcess とか ptrace を使う話だ ← これお前の書き込み
↑デバッグ用のAPI(お前が言うにはDebugActiveProcessだが)で動的に差し替えてみろよ
基地害だからDebugActiveProcessで動的差し替えできると思ってるらしいが
> デバッガーでブレークかけて違う関数呼び出したりできることもご存じない?
お前何万回と呼ばれる可能性のあるmallocをブレークとか片腹痛いwww
お前は手動でやる事にこだわってたのかよ…そりゃ話が合わないわ
もういいよボロが出ちゃったから
0834デフォルトの名無しさん
2016/03/31(木) 19:52:41.84ID:wytOYZTk取り合えずお前らみんな手動でやる事にこだわってたんだなw
ポチポチ頑張ってくれよw
0835デフォルトの名無しさん
2016/03/31(木) 19:57:15.37ID:ScXuRFRf> 例外があるなら具体的に挙げてみろと言ってるだけなのだが?
>>813 じゃダメなのか?
0836デフォルトの名無しさん
2016/03/31(木) 20:09:40.29ID:ScXuRFRf> だからサードパーティ製のようなDLLしかないライブラリを使う場合はどうなるってんだよ
勝手な後だし条件かよ w
サードパーティの malloc ?
とりあえず参考までに具体的な名前教えて
> DLL Injectionでmalloc/freeを置き換えるのが不可能だと言いたいのか?
別にやりたきゃやればいいだけ
別の方法もあるってだけの話
> 不可能ではなければそれだけで全て事足りるだろ
スタティックライブラリの例は無視なの?
> 基地害だからDebugActiveProcessで動的差し替えできると思ってるらしいが
DebugActiveProcess「とか」って書いてあるのが見えないの?
> お前は手動でやる事にこだわってたのかよ…そりゃ話が合わないわ
はあ?
なんのために API の名前書いてあると思ってるんだ?
そう言うプログラムを作るだけの話だろ
デバッグて書くとデバッガしか思いつかないとかどんだけ頭固いんだよ...
> もういいよボロが出ちゃったから
敗北宣言ですか?
確かにお前のレスはボロボロだしな w
0837デフォルトの名無しさん
2016/03/31(木) 20:11:03.13ID:X8/ytHGiつhttp://www.amazon.co.jp/dp/4894714221
0838デフォルトの名無しさん
2016/03/31(木) 20:18:26.41ID:wytOYZTk> 勝手な後だし条件かよ w
つうかそれぐらい普通に想定しろよw
> サードパーティの malloc ?
サードパーティのmallocなんて言ってねーよw
DLL内でnewしてオブジェクトを返すライブラリがあったとして
それをdeleteするにはDLL内のmallocを捕捉する必要がある。アンダースタン?
> 別の方法もあるってだけの話
それは分かったよ
一生懸命ブレーク張って置き換えんだろwww
面白すぎるもっとやってくれ
> そう言うプログラムを作るだけの話だろ
DebugActiveProcess「とか」言ってんなら
取り合えず数行でもいいからコード書いてよマジで
とりあえず一生懸命ネットでググって得た知識だから
全然具体的な事はわかってないんだろ?
マジで書けよ、おい
0839デフォルトの名無しさん
2016/03/31(木) 20:21:28.25ID:wytOYZTk取り合えずDebugActiveProcessで一回嘘ついてんだよお前は
早く他の方法をコードつきで書けよ、ほら
次はなんだよ
0840デフォルトの名無しさん
2016/03/31(木) 20:27:56.34ID:wytOYZTk> > DLL Injectionでmalloc/freeを置き換えるのが不可能だと言いたいのか?
> 別にやりたきゃやればいいだけ
> 別の方法もあるってだけの話
DLL Injectionでいいし何も問題無い事にわざわざケチ付けて別の方法を言う意味がどこにあんだよ
マジで頭おかしいだろ
0841デフォルトの名無しさん
2016/03/31(木) 20:48:29.39ID:6cajku4Z0842デフォルトの名無しさん
2016/03/31(木) 20:56:47.61ID:WeZ5Ydwh0843デフォルトの名無しさん
2016/03/31(木) 21:00:14.44ID:ScXuRFRf> それをdeleteするにはDLL内のmallocを捕捉する必要がある。アンダースタン?
delete ?
ちょっと頭冷やした方がよくね?
3連投とか顔真っ赤なのはわかったからさ w
> 一生懸命ブレーク張って置き換えんだろwww
ん?
一生懸命なのはコンピューターだよ?
ああ、無駄なレスしてるお前も一生懸命だったな w
> 取り合えず数行でもいいからコード書いてよマジで
>>832 で十分だろ?
あれでわかんないところがあるのか?
>>839
> 取り合えずDebugActiveProcessで一回嘘ついてんだよお前は
はあ?
どこが嘘なのか具体的によろ
>>840
> DLL Injectionでいいし何も問題無い事にわざわざケチ付けて別の方法を言う意味がどこにあんだよ
はっきり「スタティックライブラリ」って書いてあってもアホは噛みついてくるんだな
狂犬病かよ w
0844デフォルトの名無しさん
2016/03/31(木) 21:13:16.81ID:wytOYZTk> delete ?
auto a = getNewObjectFromThirdPartyLib();
... aを使う
delete a; ← これ
newはライブラリ内にあるが、deleteは自分のソースに書く
リークを検出するには、ライブラリ内のnew(malloc)を捕捉しないと
自分のソース内のdelete と釣り合いが取れなくなる
っていうか、頭悪wwwかわいそうだなお前
> あれでわかんないところがあるのか?
分かってないのはお前
取り合えずコード書けないのは分かったから流れだけでも説明してよ
それすら出来ない?
多分しないだろうけど
> どこが嘘なのか具体的によろ
https://msdn.microsoft.com/ja-jp/library/cc428926.aspx
> デバッガをアクティブなプロセスにアタッチしてデバッグできるようにします。
プロセスにアタッチするAPIだからwww残念
お前はデバッグさえ出来れば置き換えられると思って書いただろうけど
アタッチするだけのAPIだったよwww
俺は知らないけど他に必要なんだよ(手動は無しよw)
だから次はそれを教えてよ、はい頑張って
0845デフォルトの名無しさん
2016/03/31(木) 21:16:35.66ID:wytOYZTk> はっきり「スタティックライブラリ」って書いてあってもアホは噛みついてくるんだな
>>767を読め(これは俺じゃない)
0846デフォルトの名無しさん
2016/03/31(木) 21:22:55.74ID:2aAx7JX62chでまじめな話は無理だってことは証明された
0847デフォルトの名無しさん
2016/03/31(木) 21:23:07.76ID:wytOYZTkDebugActiveProcessって英語読めれば一目瞭然なのにここまで引っ張るとはw
DebugActiveProcess君は次も間違いなく具体的なことは書かずに
誹謗中傷に徹するだろうな
0848デフォルトの名無しさん
2016/03/31(木) 21:30:04.70ID:Tq9AKUqvだから頭冷やせよ...
> それをdeleteするにはDLL内のmallocを捕捉する必要がある。
どこがアホなのか説明した方がいいか? w
> 流れだけでも説明してよ
>>832 に流れが説明してあることも理解できないのか?
とりあえず >>832 に書いてある API をググる作業に戻れよ w
0849デフォルトの名無しさん
2016/03/31(木) 21:34:51.22ID:wytOYZTk> > それをdeleteするにはDLL内のmallocを捕捉する必要がある。
> どこがアホなのか説明した方がいいか? w
それを(リーク検出の為に釣り合いを保って)deleteするにはDLL内のmallocを捕捉する必要がある。
アホには言葉足らずだったスマン
> >>832 に流れが説明してあることも理解できないのか?
手動のやつかよ興味ねーよ
毎回アタッチされて止まるまで待つのかよ馬鹿かよw
DLL Injection
0850デフォルトの名無しさん
2016/03/31(木) 21:37:31.76ID:nkzU0v9Fって自分でデバッガ自作するときのやつだろ
そこまでやるならなんか買って来て使えばいい
0851デフォルトの名無しさん
2016/03/31(木) 21:37:36.59ID:wytOYZTkDLL Injectionと比較して利点と欠点ぐらい言えよ
非効率な方法を一生懸命説明してるのがマジで切ない
0852デフォルトの名無しさん
2016/03/31(木) 21:38:09.58ID:hPPCag02DLL境界を越えてメモリブロックを渡して呼び出し側にdeleteさせるなんてライブラリは
ほとんど仕様のバグに等しいんだから、そんなの考慮外でいいだろう。
0853デフォルトの名無しさん
2016/03/31(木) 21:43:46.11ID:wytOYZTkそうとは言い切れない
auto a = getNewObjectFromThirdPartyLib();
... aを使う
releaseObjectFromThirdPartyLib(a);
みたいに直接deleteはさせないけど解放用のAPIを用意してることは考えられる
releaseObjectFromThirdPartyLib(a);を呼び忘れる事がメモリリークだから
考慮は必要だと思うよ
0854デフォルトの名無しさん
2016/03/31(木) 21:51:21.59ID:lrEHU6MCgslのワークスペースなんかはそんな仕様だよな
0855デフォルトの名無しさん
2016/03/31(木) 22:00:14.98ID:hPPCag02だから>>844は間違ってて、>>853のようにするのが正しいんだよ。しれっと修正すんなw
で、「getで取得したものはreleaseで返しましょう」ってなったらリーク検知というよりも
そのライブラリの使い方が正しいかどうかって話だな。
そもそもそのgetで動的にメモリを確保してるのかどうかすらわからんわけだし。
0856デフォルトの名無しさん
2016/03/31(木) 22:06:00.43ID:wytOYZTk修正したつもりはなかったけど、deleteだけさせる事は確かにほとんど無いかもね
でもDLL Injectionでmalloc/freeに加えてget/releaseも捕捉すればいいから
メモリ以外にも色々なリソースリークに使えるはず
0857デフォルトの名無しさん
2016/03/31(木) 22:18:54.48ID:Tq9AKUqv別にアホが複数いるのは珍しくないけど?
で、君の意見はないのか?
0858デフォルトの名無しさん
2016/03/31(木) 22:24:48.34ID:Tq9AKUqv> それを(リーク検出の為に釣り合いを保って)deleteするにはDLL内のmallocを捕捉する必要がある。
malloc を捕捉なんてしなくても delete できるけど?
まだ、恥の上塗りする? w
> 毎回アタッチされて止まるまで待つのかよ馬鹿かよw
バカすぎ笑たわ
>> WaitForDebugEvent でプロセス一時停止するまで待って
って書いてあるのも理解できてないとか w
0859デフォルトの名無しさん
2016/03/31(木) 22:27:10.04ID:Tq9AKUqv動作中のプロセスにも適用できるとかかな
もちろんスタティックライブラリでも大丈夫だし w
0860デフォルトの名無しさん
2016/03/31(木) 22:30:31.37ID:Tq9AKUqv> って自分でデバッガ自作するときのやつだろ
デバッガの作成にしか使えないと思ってるなら頭固すぎ
あるものは便利に使わなきゃね
0861デフォルトの名無しさん
2016/03/31(木) 22:33:36.80ID:wytOYZTk> malloc を捕捉なんてしなくても delete できるけど?
メモリリークの話してんのにmallocを捕捉しないとか本末転倒過ぎてもう…
色々突っこんでる奴いるけどお前が群を抜いて馬鹿だなww面白すぎww
>> WaitForDebugEvent でプロセス一時停止するまで待って
いや待ってるじゃんww
メクラかよ
サーバープログラムとか一時停止するまで待つとかありえねーよ
っていうと後出し言うんだろwww
お前が経験無いだけだからww残念
DebugActiveProcess君、はい次どうぞww待ってるよ
0862デフォルトの名無しさん
2016/03/31(木) 22:39:28.58ID:wytOYZTk> malloc を捕捉なんてしなくても delete できるけど?
これを書き込むに至った理由を頼むから教えてくれ、m(_ _)m ← このとーりwww
ちゃんと保存しとくから
0863デフォルトの名無しさん
2016/03/31(木) 22:47:39.10ID:wytOYZTkあと>>832で
> ブレークしたら malloc エミュレートするなりなんでもできるだろ
ここのAPIが書いてないからサクッと補完しといて(手動は無しよw)
見た瞬間分かるんだよね?どこかのリンクでもいいよ
0864デフォルトの名無しさん
2016/03/31(木) 22:51:13.84ID:Tq9AKUqv別に数ms 程度停まっても平気なサーバーソフトはいくらでもあるぞ
>> malloc を捕捉なんてしなくても delete できるけど?
> これを書き込むに至った理由を頼むから教えてくれ
冷静なら
> DLL内でnewしてオブジェクトを返すライブラリがあったとして
> それを(きちんと)delete(したかを確認)するにはDLL内のmallocを捕捉する必要がある。
って書くわな
恥ずかしいだろうからわざと説明しなかったのに w
0865デフォルトの名無しさん
2016/03/31(木) 22:55:30.35ID:wytOYZTk> 別に数ms 程度停まっても平気なサーバーソフトはいくらでもあるぞ
とりあえず>>863に返答して完全に自動で出来る事を証明しろ
じゃなきゃ手動でやってたら数msで済むわけ無いだろ
>>849に書いたけど
> それを(リーク検出の為に釣り合いを保って)deleteするにはDLL内のmallocを捕捉する必要がある。
> アホには言葉足らずだったスマン
揚げ足取るにしても寒いツッコミだったなwww
はい次、>>863の返答を待ってるよ
0866デフォルトの名無しさん
2016/03/31(木) 22:57:25.36ID:X8/ytHGi0867デフォルトの名無しさん
2016/03/31(木) 22:57:46.00ID:Tq9AKUqv> ここのAPIが書いてないからサクッと補完しといて(手動は無しよw)
API?
お前本当に何もわかってないんだな w
お前が言ってる DLL Injection でも Injection されるコードは必要だろ?
さすがにそれぐらいは理解してると思ったが...
0868デフォルトの名無しさん
2016/03/31(木) 22:58:20.05ID:6K07pBVr0869デフォルトの名無しさん
2016/03/31(木) 22:59:37.41ID:wytOYZTkちなみにWriteProcessMemoryは関数が置いてあるコード領域は書き換えられないよ
これはグローバル変数とか書き換える用だろ
0870デフォルトの名無しさん
2016/03/31(木) 23:02:06.51ID:wytOYZTkアホか
だからmy_malloc()みたいな関数があってそれをどう使えば
>>832の後に関数の中身を書き換えられるのかコードかリンクを出せよ
さっきから文章しか書いてないぞ
そろそろコードがみたいよwww
0871デフォルトの名無しさん
2016/03/31(木) 23:03:46.52ID:Tq9AKUqv> とりあえず>>863に返答して完全に自動で出来る事を証明しろ
デバッガというソフトがやれることが自動化できない理由がないと思うんだが...
> じゃなきゃ手動でやってたら数msで済むわけ無いだろ
なんで手動にアホみたいに固執するのか意味わからん
マクロを知らないで Excel でポチポチやってるおばちゃん並みの知恵しかないのか w
0872デフォルトの名無しさん
2016/03/31(木) 23:05:53.46ID:wytOYZTk> デバッガというソフトがやれることが自動化できない理由がないと思うんだが...
ご名答ww
だからAPIを教えてっていってんだよ
なぜならお前が何も知らない馬鹿だと思ってるからそれを覆して欲しい
> なんで手動にアホみたいに固執するのか意味わからん
それがお前が手動でしかできない方法をアホみたいに支持してるからwww
0873デフォルトの名無しさん
2016/03/31(木) 23:10:41.80ID:wytOYZTkとりあえず今後はデバッガ野郎って呼ぶよw
0874デフォルトの名無しさん
2016/03/31(木) 23:15:42.52ID:wytOYZTk逆に、理論上出切るとしても>>832の流れで関数書き換えを自動化するAPIが
無かったらどうすんの?
それでも出来るから出来ると言い張るのか?
0875デフォルトの名無しさん
2016/03/31(木) 23:15:55.54ID:Tq9AKUqv> ちなみにWriteProcessMemoryは関数が置いてあるコード領域は書き換えられないよ
はあ?
まあお前には無理かもな w
ちゃんとやれば普通に書き換えられる
0876デフォルトの名無しさん
2016/03/31(木) 23:17:52.72ID:wytOYZTkちゃんととは?
メモリの属性を書き換えるんだろ?そのAPIをちょろっと教えてよ
0877デフォルトの名無しさん
2016/03/31(木) 23:19:18.82ID:wytOYZTkで、>>832の
> ブレークしたら malloc エミュレートするなりなんでもできるだろ
これに関する話題が無いけど、こっちも早く返答しろ
0878デフォルトの名無しさん
2016/03/31(木) 23:19:26.94ID:Tq9AKUqv理論も何もデバッガが普通にやってることだぞ
デバッグ中にソースコード変更してデバッグ継続とかすらできる時代に何を言ってるんだよ...
デバッガが魔法のソフトだとでも思ってるのかよ w
0879デフォルトの名無しさん
2016/03/31(木) 23:21:31.31ID:wytOYZTkID変わる前に
> ブレークしたら malloc エミュレートするなりなんでもできるだろ
が出来る事をコードを書くなりリンクを貼るなり早くしてくれ
0880デフォルトの名無しさん
2016/03/31(木) 23:23:25.43ID:wytOYZTkだから>>832に自動化する方法をサクッと付け加えてくれればいいよ
0881デフォルトの名無しさん
2016/03/31(木) 23:24:15.22ID:wytOYZTkさっきからコードを書いたりリンク貼ることを一生懸命回避してるなw超ウケルよww
0882デフォルトの名無しさん
2016/03/31(木) 23:27:45.26ID:Tq9AKUqv属性?
知ってる知識総動員かよ、しかも的はずれとか w
とりあえずお前はここ読んどけ
やってる内容はちょっとアレだけどコードにパッチ当てるコードが載ってる
http://peryaudo.hatenablog.com/entry/20100516/1273998518
0883デフォルトの名無しさん
2016/03/31(木) 23:32:31.59ID:wytOYZTkお!やっと来たか!
確かにこれでパッチは可能だな。これは参考になる
ただコンパイルしたコードはアドレスとか解決しないといけない
それが足りないから、はい次待ってるよ
0884デフォルトの名無しさん
2016/03/31(木) 23:34:02.76ID:wytOYZTkデバッガを作るだけじゃ飽き足らずこんどはローダーを作らないといけないな
で、完成したものはDLL Injectionのコードと同じになるというwww
0885デフォルトの名無しさん
2016/03/31(木) 23:35:37.45ID:wytOYZTkとりあえずMy DLL Injectorに半分近づいたよwww
残りを楽しみに待ってるよ
0886デフォルトの名無しさん
2016/03/31(木) 23:48:41.29ID:wytOYZTkもしかしてコンパイルしたコードをそのまま貼り付けられると思ったか?
ちょっと考えただけでもとんでもなく手間の掛かることだがな
グローバル変数の「実」アドレスとか*.oには含まれてないから全部解決しないといけない
当然別の関数のアドレスとかもね
コンパイルする時に実アドレスを想定して*.oを吐き出せるはずだが…現実的じゃないね
LoadLibraryとか使えば?DLL Injectionのコードと同じになっちゃうけどww
0887デフォルトの名無しさん
2016/03/31(木) 23:50:35.80ID:Tq9AKUqv実行中のプロセスにアタッチする
って言ってるのに底抜けのアホだな w
あとアドレス情報はデバッグ情報から取得すればいいだけ
アホはデバッグ情報ない場合はどうするんだ?
とか言うだろうけどそんなケースは DLL Injection でも無理だから
0888デフォルトの名無しさん
2016/03/31(木) 23:55:43.08ID:lrEHU6MCアタッチってローダーをコールする+αのことやで
0889デフォルトの名無しさん
2016/03/31(木) 23:56:40.39ID:wytOYZTkめんどくさい奴だな…
> ローダー?
> 実行中のプロセスにアタッチする
ちがうよ、書き換える元だよ
my_malloc()をコンパイルするとmy_malloc_lib.oが出来る
はいそっからどうすんの?
俺の使ってるデバッガは*.oを実行時にリンクできるよ
> とか言うだろうけどそんなケースは DLL Injection でも無理だから
はいダウトwww
DLL Injectionは単に外部シンボルを使うからロードできる
つうかDLLのローダにデバッグ情報とか関係無いぞ
0890デフォルトの名無しさん
2016/03/31(木) 23:58:52.43ID:wytOYZTkあと
> あとアドレス情報はデバッグ情報から取得すればいいだけ
もダウト
「実」アドレス情報がデバッグ情報にあるわけないwww
相対アドレス情報が外部シンボルに関連付けられてるだけだ
どうした?もう眠いか?
0891デフォルトの名無しさん
2016/04/01(金) 00:11:47.22ID:ebD6jQFi> 属性?
OpenProcess(PROCESS_ALL_ACCESS
でメモリの属性を変更してるじゃん
https://msdn.microsoft.com/ja-jp/library/cc429278.aspx
によるとPROCESS_ALL_ACCESSは
PROCESS_VM_WRITE このプロセスの仮想メモリへの書き込みを行うために、 関数がこのプロセスのハンドルを使うことを認めます。
を含んでるからこれでメモリの属性変更してる
これしないでメモリ書き換えようとすると例外が発生するはず
0892デフォルトの名無しさん
2016/04/01(金) 00:17:08.75ID:ebD6jQFiとりあえずもう日付変わったがまだまだ続けるよ
0893デフォルトの名無しさん
2016/04/01(金) 00:21:12.92ID:QUj0XugJpostMessageさんは、実際のコードも出してこないし多分細かいことはあんまりよくわかってない
大きい企業で、俺はコードもかけますよ風のマネージャーかなんかやってんじゃないかな
0894デフォルトの名無しさん
2016/04/01(金) 00:22:50.92ID:ebD6jQFi俺は
ID:wytOYZTk
ID:ebD6jQFi
だがそれは俺に言ってんの?
0895デフォルトの名無しさん
2016/04/01(金) 00:34:13.94ID:vf5GPZ8Mお前のローダーの定義って面白いな
アタッチで何を「ロード」するんだよ w
>>889
> DLL Injectionは単に外部シンボルを使うからロードできる
シンボルあるならそれ使えばいいだけ
何度も書くがスタティックライブラリだと手も足も出ないだろ?
>>891
> PROCESS_VM_WRITE
これはあくまでも権限設定
まあ、100歩譲って API 中で操作してるメモリープロテクション関連の設定を属性って言ってるって思ってやるよ
> これしないでメモリ書き換えようとすると例外が発生するはず
権限のチェックが入ってるから API が失敗するだけ
0896デフォルトの名無しさん
2016/04/01(金) 00:44:59.58ID:ebD6jQFi> アタッチで何を「ロード」するんだよ w
アタッチするのは書き換え先のプロセス
ロードするのは書き換えもとのオブジェクトファイル
なんでスッと理解できないのか…
> シンボルあるならそれ使えばいいだけ
wwwwDLLにはシンボル情報は「常に」あるよ
> 何度も書くがスタティックライブラリだと手も足も出ないだろ?
そりゃDLL Injectionだからな。ただ、スタティックリンクされた関数をDLLで上書きできる
それと手も足も出てないのはお前も一緒だろwww
まだ*.oを実行時にリンクするコードを示せてないからなw
> まあ、100歩譲って API 中で操作してるメモリープロテクション関連の設定を属性って言ってるって思ってやるよ
スゲー負け惜しみwww最高ww
> 権限のチェックが入ってるから API が失敗するだけ
そりゃそうか。逆にAPIを使わずに直接メモリを書き換えたら権限の有無でどうなるんだ?
0897デフォルトの名無しさん
2016/04/01(金) 00:48:14.33ID:TWdLoFti極めてエンジニアには向かない性格だな
欠格事由と言っても良いくらい
0898デフォルトの名無しさん
2016/04/01(金) 00:49:04.42ID:ebD6jQFiとりあえず揚げ足取り合戦はこれぐらいにして、ローダーも理解せずに
どうやって*.oをロードするんだ?
リンクで教えてもらったのは単にメモリを書き換える方法だけだぞ
結局それらをまとめた処理をDLL Injectionって言うんだけど
理解してもらえるまで(またはお前がMy DLL Injectorを作るまで)付き合うよ
0899デフォルトの名無しさん
2016/04/01(金) 00:50:13.04ID:ebD6jQFiさっきから誰宛だ?
0900デフォルトの名無しさん
2016/04/01(金) 00:53:18.83ID:6Qn82sqQあんま読んでねーけど、お前がpostMessageならお前宛なんじゃね?
そうじゃないなら違うだろ
0901デフォルトの名無しさん
2016/04/01(金) 00:54:39.03ID:TWdLoFti0902デフォルトの名無しさん
2016/04/01(金) 00:58:25.84ID:TWdLoFti0903デフォルトの名無しさん
2016/04/01(金) 01:00:10.90ID:ebD6jQFi俺は
ID:yO7JBNvw
ID:wytOYZTk
ID:ebD6jQFi
だが、postMessageなんて一度も書き込んでないけどどういうことだ?
0904デフォルトの名無しさん
2016/04/01(金) 01:03:36.92ID:6Qn82sqQPostMessageくん ≡ ID:yO7JBNvw
=ID:Sejgg9vl
まで読んだ
0905デフォルトの名無しさん
2016/04/01(金) 01:03:55.13ID:17sn2y0Z0906デフォルトの名無しさん
2016/04/01(金) 01:06:20.68ID:ebD6jQFiとりあえずWindowsでDLL Injectionのやり方
http://inaz2.hatenablog.com/entry/2015/08/08/223643
で、ここの最後の行で
> DLLを使わないコードインジェクション
> ここではRemoteCreateThread関数でLoadLibrary関数を呼び出したが、
> WriteProcessMemory関数で実行可能メモリを確保し、
> そこにコードをコピーして直接実行させることも可能である。
> この場合DLLが不要となる一方、利用するAPI関数一式のアドレスを事前に取得し、
> 構造体などの形でコピーしたコードに渡す必要があるため、
> 複雑なコードの実行には適さない。
ちょっとググるだけでこんなん出てきたよ
さあどうする?
0907デフォルトの名無しさん
2016/04/01(金) 01:08:37.84ID:ebD6jQFiPostMessageは上のほうでなんかやり合ってた話題か
とりあえず俺はDLL Injection君でいいよw
0908デフォルトの名無しさん
2016/04/01(金) 01:08:39.14ID:vf5GPZ8Mデバッグ情報だけって思っちゃったか w
何度も書くけどデバッガにできることができないと思う精神構造がよくわからん
>>896
> アタッチするのは書き換え先のプロセス
これはいいけど
> ロードするのは書き換えもとのオブジェクトファイル
意味わからん
書き換え元のオブジェクトファイルも意味わからんし、アタッチにどう関係するのかもさっぱりわからん
しかもローダーを作るとか
なんか壮大に勘違いしてるとしか思えん
> wwwwDLLにはシンボル情報は「常に」あるよ
うんそれは知ってる
でスタティックライブラリは?
上書きするとか言ってるけどアドレスどうやって取得するつもりなんだ?
> まだ*.oを実行時にリンクするコードを示せてないからなw
なんでそんなもんが必要なのかよくわからん
そんなもんリンクしなくてもスレッド停めて自前でエミュレートすればいいだけだし
> そりゃそうか。逆にAPIを使わずに直接メモリを書き換えたら権限の有無でどうなるんだ?
他のプロセスのメモリーをどうやって直接書き換えるつもりなんだよ...
メモリー空間すら理解してないのかよ w
レス数が900を超えています。1000を超えると表示できなくなるよ。