タイトル/名前 | 更新者 | 更新日 |
---|---|---|
C言語系/memos/BCC/01, Win32のEXE,LIB,DLL開発入門(C言語) | msakamoto-sf | 2010-02-24 14:34:13 |
C言語系/memos/BCC | msakamoto-sf | 2010-02-24 14:27:13 |
日記/2010/02/24/消毒を!メディーック!! | msakamoto-sf | 2010-02-24 14:04:49 |
日記/2010/02/22/aliasファイルでコマンドリダイレクトでタイムアウト? | msakamoto-sf | 2010-02-22 22:29:07 |
日記/2010/02/21/湯飲み茶碗の茶渋→練り歯磨き粉でOK | msakamoto-sf | 2010-02-21 11:30:18 |
日記/2010/02/20/つくづく体力が落ちてる | msakamoto-sf | 2010-02-21 00:02:34 |
日記/2010/02/18/昔からのIT技術者を尊敬する時 | msakamoto-sf | 2010-02-18 21:17:42 |
日記/2010/02/16/ステートマシン系のフレームワーク、流行らないよな・・・ | msakamoto-sf | 2010-02-16 23:10:10 |
日記/2010/02/14/ようやく、ようやく書いてある内容が分かるようになった・・・! | msakamoto-sf | 2010-02-14 17:24:35 |
C言語系/memos/VC++/04, Win32のEXE,LIB,DLL開発入門(C言語) | msakamoto-sf | 2010-02-14 13:02:40 |
C++ は使わずに、C言語とCRT(Cランタイムライブラリ)とWin32APIだけを用いて、コンソール/Windows/スタティックライブラリ/DLL を、コマンドラインからコンパイルして作成する方法のまとめ。UNICODE対応は使わない。
ヤバイ、また自分の頭が汚染されていく・・・
id:AntiSeptic さん、消毒してくれー!!!
aliasファイルでコマンドにリダイレクトするプログラム周りで、maillogを見てみたらこんなのが出てた:
Feb 19 15:57:55 server1 postfix/local[32429]: xxyy: to=<foo@bar.com>, \ relay=local, delay=2, status=sent (delivered to command: /foo/bar/baz.sh -a 1 -b 2) Feb 19 15:57:55 server1 postfix/qmgr[1475]: xxyy: removed Feb 19 15:58:06 server1 postfix/local[31929]: warning: pipe_command_read: read time limit exceeded
あ・・・もしかしてコマンドに流した時、pipeのRWのタイムアウト設定されてて、それ超えちゃってる?
直さないと駄目か・・・。
今日、なぜか酸素ボンベ背負ってレギュレータとかいうマスクで「コー・ホー」ならしながら水に潜る練習を受けていたのですが。
借り物のウェットスーツがきつめだったのと、水の中で中腰姿勢を保つのに慣れてなかったのか色々と筋肉をつかったみたいで1時間ほどで「○○さん(インストラクターの人)~、疲れました~~~。゚(゚´Д`゚)゚。」状態。
深いところに潜ってみるのは次回ということで。
前の前の会社、つまり最初に入って5年くらい勤めた会社で世話になった年配の技術者(今は管理職)は、大学時代にFORTRANで、パンチカードに穴を開けて物理実験のデータ整理などをしていたらしい。会社に入ってからは、主に電力発電の制御などをメインとして数社渡り歩いている。
仕事で「SQL組むのがめんどくて~」とか雑談してると、「なんでSQLを使うのか未だによく分からない・・・ファイルI/O直接叩けばよかね?」とか返してきたりする。もちろんSQLの良さも御存知で、DBを使う時にRDB以外を選択する方が珍しくなった最近のSI現場もよく知っている。管理職だし。ただ、どうも感覚的・・・というか、「なんでそこまでしてSQLに拘るのか?」という部分があるのかもしれない。
面白いのが、以前やっぱり雑談していた時に、「(自分)最近はORMとかで、SQL書かなくてもメソッドつなげるだけでOKな仕組みも出てきてるようですが・・・なんでわざわざORMを使うのか未だによく分からないんですよね・・・SQL書けばそれでいーじゃん、みたいな」と愚痴ったら、「それそれ。いつも『ファイルI/O直接叩けばいいじゃん』っていってるのは、その感覚だよ」と突っ込まれたww。
で、先日もその方の飲み会に御邪魔させてもらったのだけれど、「(自分)マシン語が分かっただけじゃ駄目ですね・・・OSとマシン語の境界、OSの仕組みを理解しないと、わけわからないっす」と愚痴ったら、「昔はそうだったんだよ、マシン語理解して、次にOSの機能をマシン語レベルで理解して・・・でないと外部IOとやりとりできないし、スーパーバイザ相当の機能もあったりして、使いこなせなかったもの」と突っ込まれたしww。
やはりマシン語の世界を知っている人は・・・強い、というよりは、面白いなぁwww。ちょうど今、そういう人の体験を逆向きに辿ってる訳だwww。
あんまり、状態遷移の概念を使ったフレームワークって流行らないな・・・。
Piece Project も落ち着いてしまった感じがするし、普段のPHP勉強会で話題になるのは状態を持たないstatelessなフレームワークばかりだ。
多分状態遷移の概念自体が、理解するのが大変・・・というか「ステート」とか「ビュー」とか「イベント」とか、キーワードが一気に出てくるし、裏側の動きがうまくイメージ出来ないのも流行らない原因かな?敷居が高いのかも。
でも業務アプリで入力フローが複雑な場合は、これが無いとやってらんないと思うんだけどね・・・2画面以上に渡るウィザードであったり、一つの作業を完結させるのに複数画面を行き来する必要があって、その流れの中での「一時的な作業途中の状態」に基づいて色々処理しないといけないときとか。こういう場合は、個人的には状態遷移の概念が無いととてもじゃないけどやってられないと思う。途中の画面のURLを無理矢理叩かれた場合の対処という面も確かにあるのだけれど、それ以上に手動で画面の流れを制御する必要が無くなるし、「一時的な作業途中の状態」の永続化も裏側でやってくれるようになるので、手間が省ける。
・・・とぐだぐだと愚痴を書き連ねてしまうのも、いい加減頭が固くなりつつあり、PHPのフレームワークの流行廃りについていけなくなりつつある証拠なのかもしれない。
やった!やったよ!!!・・・くぅーーーっっ、購入してから6年が経ち、ようやく、ようやく書いてある内容の意味が分かるようになった・・・!!!!
書いてある内容が、OllyDbgでどこをどう書き換えるとどうなるか、関数呼び出しの参照箇所やDLLのインポート周りなど、ようやく・・・・・・あーーーーーーーー、本当に長かった・・・ようやく、頭にするすると入るようになったぁああああああああああ!!!!!!!!!!
・・・さすがに、最後のパッキングで展開されるコードを元に、未展開状態のファイルにパッチをあてる部分は分からなかったけど。
OSの提供するメモリ管理の機能を使って、メモリ上に展開したマシン語コードを実行する仕組みについては、まだまだUNIX系もWindows系も理解不足な世界なので、これはまた後日改めて(おそらく書籍も変わって)攻略する。CreateProcess()やfork(2)→execve(2)の内部、LoadLibrary()やmmap(2), dl_open(2)の内部、OSとアセンブラとC言語の境界線、その一際濃い部分になってくるが、絶対攻略してやるぜ!!!
ああ~~~それでも・・・うーん・・・いいねぇ。実行ファイルというか、バイナリの世界をさまよい、マシン語とOSと、C/C++言語や周辺技術の境界線上を綱渡りするのは・・・そして、マシン語のレベルからOS、ファイルフォーマット、C/C++言語の仕様まで一気に貫通できる視点と、それで見えてくる世界の奥深さ・・・!!!
まぁC++とアセンブラの境界にはまだ手を出してないんだけど。でも遅かれ早かれ、Windows上でのバイナリの世界はC++とは切り離せないから・・・やらなアカンやろうな・・・。
でも楽しいなぁ、ホント楽しいなぁ!!!もう仕事じゃなくて趣味でも構わないよ!!!うっひょーって感じだNE!!!分かれば分かるほど、見えてくれば見えてくるほど、コンピュータウィルスやマルウェアが「どうやってこんな事を実現してるんだろう?」って思えてくるし!一つの山を越えたと思ったら、目の前にその2倍以上の高さの山が、山脈となって立ちはだかっていましたみたいに、どんどん世界が広がっていくし!だって.NETフレームワーク使ってたりCLR使ってたり、そういう中間言語が混ざった実行イメージとかどうやってOSはメモリ上に展開して制御してるんだろう!?ファイルフォーマットは!?とか謎が尽きないぜ~~~!!!
・・・いやね、まぁね、もうね、とっくに本職の方々やとんでもないレベルのハッカーの皆さんが、Web上に豊富な資料を公開してくれてて、解析されてる事は分かってるんだけどね。「未開の大地」を踏みしめる訳ではなくて、これまでの沢山の人達が整備してくれた、区画整理まで終わっている町中を探検してるだけではあるんだけどね。
いくら包丁の作り方や包丁の歴史を学んでも、ゴボウのささがきの仕方を学んで、分かりやすく説明出来るようになったとしても、美味しい料理を作れなけりゃ商売にならないのは分かっちゃいるけどさ・・・。
まぁでも、暫くは津田沼で隠棲し、金にならない・・・けど、今まで気になっててならなかった技術領域を攻略するつもりなので、既に誰かが解析済だとしても、その成果を有り難く頂戴しつつ、自分の足でゆっくりと探検を進めたいです。
・・・最初に戻るけど、やっぱりバイナリの世界は・・・面白い、から!!!(少なくとも今は。)
CLR, .NET, C++ は使わずに、C言語とCRT(Cランタイムライブラリ)とWin32APIだけを用いて、コンソール/Windows/スタティックライブラリ/DLLを、コマンドラインからコンパイルして作成する方法のまとめ。UNICODE対応は使わない。
※複数ファイルの分割コンパイル+リンクについては C言語系/memos/VC++/01, 共通系コンパイルオプション 参照。
参考MSDN(Express Edition):
対象:Visual C++ 2008 Express Edition
> cl Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. > link Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved.(全て表示する)