私はVisual Studio 2005 Academic Editionを使っているのですが、最近プロジェクトをリビルドしたときの動作がおかしいです。今まで正常に動いていたのに、いきなりMSVCP80D.DLLがありません、と言われて起動しなくなることがあります。
何回リビルドしても駄目なときは、プロジェクトを置いているディレクトリに生成される DebugやReleaseというディレクトリを丸ごと葬ると直るようです。実行ファイルが生成される方ではなく、オブジェクトファイルが生成される方のディレクトリです。
ビルド時のメッセージにも特に異常はないし…一体何なのかね??ネットワークドライブにファイルを置いているからいけないのでしょうか?
同じ症状が出ている人or解決策を知っている方はぜひ教えてください。
WindowsのDLLではエクスポートをフォワーディングするという芸当ができるそうです。この機能を使うと、別のDLLがエクスポートしている関数を借りてきて、自分がエクスポートする関数にすることができます。
実際の使用例としては、kernel32.dllのHeapAllocというAPIが、ntdll.dllのRtlAllocateHeapと言うAPIにフォワーディングされています。フォワーディングされた関数はロード時にアドレスが解決されるようで、特にオーバヘッドはありません。
DEFファイルで、
HeapAlloc = ntdll.RtlAllocateHeap
のように [DLL名.関数名] という形で書くと、フォワーディングできるようです。
Dependency Walkerで見ると、上図のrecvのようにちょっと違うアイコンで表示されます。
COFFって面白いことができるんですねえ。と、ここまで書いて、そんなの常識だろって、詳しい方々に突っ込まれる気がしてきた…。
誕生日です。園芸のみなさんからお祝いのメールをいただきました。ありがとうございます。
大下さんと天久保2丁目(エルトリートのある交差点を東側に行ったところ)のバリ料理屋JEPUNに食べに行きました。テーブル料なるものを取るレストランに初めて行ったような気がするよ。
食べたことのない味で、おいしいです。あと、微妙に辛かったですね。個人的には限界値ギリギリでした。
(※)皆様にもっとも理解しやすいように、時計でおなじみの12進数で表記いたしました。
就職先から連絡が来ません。私は来年度どこに住めば良いのでしょうか。
しかも部署によりますが本社で研修、移住、事業所で研修というコースもあるらしく、4月に定住先が決まるのかどうか不安になってきました。
可能ならば、今住んでいるアパートを5月まで借りてしまって、ゆっくり引っ越しするという手が一番良いような気がしてきました。今年は2年契約の真ん中なのでできるはずですけど、一回不動産屋に退去するって言っちゃったのが心配。月曜日にでも不動産屋に聞いてみるかな。
こんなことになるなら、車を実家に置いてくる必要は全くなかったんですねえ。無駄に不便になっただけだったよ。うーん。
研究室の方々が WindowsってAPIのレイヤでフックできないの?って話をしていたのでちょっと考えてみました。DLLの呼び出しをフックする手法は以下のような手法が考えられますが、どれも一長一短です。
名前は勝手に付けました。下に行くほど実装が面倒くさそう、と勝手に思っています。正式名称(orもっと格好いい名前)や、他の方法をご存じの方は、ご教授いただけると幸いです。
以前、フックDLLでwinsockかなんかをフックしたことがあるので、今回はIATを外から無理矢理ぶっ潰してフックを実現してみました。
試しにWindows MessengerのSHELL32.dll!Shell_NotifyIconに割り込んで、ダイアログを表示させてみました(下図)。
ちなみにshell32.dllであればフックDLLの方が遙かに楽だと思います。kernel32.dll!CloseHandleなんかもフックしてみたのですが、見た目に呼んでるんだか呼んでないんだかわからんのよね。
ロードされたモジュールは各自のIATを持っています。そのためIATパッチを行う場合は、全てのIATのエントリを虱潰しに見なければなりません。
あるプログラムhoge.exeがkernel32.dllとuser32.dllをロードしていたとしたら、IATは少なくともhogeとkernel32とuser32の3つ分存在するはずです。
その状態でuser32.dll!MessageBoxWをフックしたいと思ったら、全てのIATのエントリからMessageBoxWに関わるエントリを探して書き換えなければ、打ち漏らしが発生してしまいます。IATパッチにおいて、フックをかける処理はかなりヘビーなものになるでしょう。
またDLLはいつロード/アンロードされるかわからないので、フックの設定や解除を徹底しようと思うとかなり難しいです。そのため厳密にフックする必要がある、セキュリティシステムなどには向かない手法です。
あとは…フックを通知する方法も考えないと行けませんね。これはそのうちなんとかなるんじゃないかと思っております。
プログラムというものは基本的には、動いて欲しいと思った通りに動くプログラムを書けば良いと思いますが、スピードや保守性を求め始めると少し事情が変わってきます。
スピードを求めるなら多少トリッキーなコードも必要になるでしょうし、保守性を求めるなら、他人が読むことを考えて綺麗に書く必要があります。
普段からエレガントで速いコードが書ければ良いのにと思っているのですが、私のようなヘボプログラマにとってはなかなか難しいです。
プログラムがうまくいかないと、いつも決まってこんなことを考えています。現実逃避とも言いますね。
朝起きて風邪がぶり返していないことにほっとしつつ、朝ご飯。
せっかく来たからには魚尽くしということで、鴨川市の地魚回転寿司丸藤に行きました。ホテルの晩ご飯も寿司があったので、都合2日で3回寿司食ったことになります。
丸藤は大繁盛で、7組くらい待っていました。恐らく丸藤は元は回らない寿司屋だったんじゃないかと予想しています。つくばで言う大漁寿司(R354沿い)みたいな感じです。
残念ながら実験が忙しくて旅行に参加できなかった榮樂君におみやげを買って、後は外房の海岸沿いをひた走り、海を見ながら帰りました。風がすごくて海が荒れまくりです。
学生生活最後にふさわしい、良い思い出が出来ました。
研究室のM2の皆さんで千葉に旅行に行きました。行きは高速で内房まで一気に進みました。途中で富津岬に寄ったらものすごい風。飛ばされそうなくらいの風にちょっと楽しさを覚えたりして。
ホテルですが、南房総は白浜町の南国ホテルという所です。安くてご飯も付いているという破格のプランでした。値段だけ見るとビジネスホテルかと思いますよ。
房総に来たからには魚を食おうってことで、寿司屋を探すも下調べしなかったのでどこに何があるかさっぱりわかりません。ホテルの人に聞いてみたら、館山市街に回転寿司のやまとがあるとのこと。チェーン店ですけどきっとネタが違うと信じてそこで食べました。
実はそんなに期待していなかったのですが、100円均一の回転寿司よりかなりおいしかったように思います。他のやまとに行ったことないので、館山だけなのか、全店同じようにうまいのかはわかりません。
ホテルでは温泉に浸かって疲れを癒しつつ、定番の温泉卓球などをやりました。ペングリップかつ、ピンポン球が全然跳ねなくて難しかった…。
ロビー横のインターネットコーナーに2時間くらい入り浸ってたのは、情報系って事でご愛敬です。
キュートで軽く昼食を取って、お菓子を堪能しました。大下さんはタルト、自分はプリン。
やっぱり高いプリンはうまいなあ、という気がしたけど、同じ容器に入れて出されてどれが一番高いか?と聞かれてきっとわからないでしょう。100円で頑張ってるプッチンプリンは偉大だと思う。
しかしどうやら風邪をひいたようで具合が悪くなり、途中で切り上げて帰ってきました。
それからはずっと寝ていました。大下さんに風邪が伝染ってないことを祈ります…。
暇で仕方ないというじょーの誘いを受けて、北脇さんと3人で遊んでいました。
ランランで夕飯を食べた後、パーティーパーティーでカラオケしました。スカスカだったのに、微妙に古い機械のある部屋に通されたのはなぜだったのかなあ。一見さんだと思われたかな?
ジャンボリーというゴルフ場で打ちっ放しをしました。YRPに居たときに、一回連れて行ってもらったくらいなもので、全然わかってません。全員右利きなのに、左利き用のクラブを間違って持ってくるくらいわかってません。
そんな状態なのでもちろんボールに当たりません。当たったら当たったで、右や左へ曲がる変化球でした。難しいなあ、ゴルフって…。
最後にいのいち亭で焼き鳥食べて、軽く飲んで解散しました。
Visual Studioはデバッグのときに、デバッグ対象のモジュール(プログラムやDLLなど)のシンボル情報を探しに行きます。基本的には [ツール(T)] - [オプション(O)] - [デバッグ] - [シンボル] で設定したパスやシンボルサーバを見に行きます。もし _NT_SYMBOL_PATHという環境変数があればそれも見ます(※)。
ここにMSの公開シンボルサーバ(http://msdl.microsoft.com/download/symbols)などを設定しっぱなしにしておくと、VSはデバッグ開始の度に見に行きます。ネットワークのスピードによりますが、かなり待たされます。
ISDN以下のナローバンド、よく切れる無線LANや腐れプロキシを通す決まりがある(企業とか)など、劣悪なネットワーク環境にいる場合、最初の一回で欲しいシンボルを落としておいて、次からは外すのが吉です。シンボルサーバにあるシンボル情報なんてそう変化するものでもないでしょう。
(※) __NT_SYMBOL_PATHは "srv*パス*サーバ" という変わった構文で書かなければなりません。設定方法はMSの Microsoft Symbol Serverを使用して(長い!略)をご覧ください。
毎回恒例のYRPのネットワークには繋げない、って決まりがあるため、無線LANのアドホックモードで別のマシンに繋いで、そこから外部へ。研究所のネットワークはHTTPしか通さないようなので繋げたとしても利用価値ないですけどね…。
しかしこの無線LANが 20分も持たずに切れる切れる。しまいにゃ俺も切れるぞ、この腐れマシンめ。
マシンが遠いからかと思って、マシンを並べてみても結果は同じでした。アドホックモードってこんな不安定なの?
未来日記を書いてしまった。防止策か削除できる仕組みを作らねばまたやってしまうなあ。と、前にもこんなことを書いたけど、結局何もしていない。
今使っているノートPC(NEC VersaPro UltraLite)は研究室からの借り物なので、4月になったら返さなければいけません。就職先へ引っ越すときのゴタゴタで、しばらくデスクトップも使えなくなると予想されます。ネットがないのは仕方ないとしても、PCがないのはちときついでしょう、ってことでノートPCを新しく買いました。
買ったのはSONYのVAIO type Gです。新型VersaProとLet's Noteあたりと結構迷いました。どれも捨てがたいです。
VersaProはCPUがCore Duoです。現行VersaProの1.8インチHDDは遅すぎなので、2.5インチHDDを選べるのは良い点です。キーボードのキーが正方形なのがGoodです。
メモリを2GBにできないのがマイナスと言えばマイナスですが、3機種の中で一番バランスが取れていると思います。
Let's NoteもCPUがCore Duoで、14時間という抜群のバッテリー駆動時間を誇ります。速度重視で2.5インチHDDを採用しています。Let's Noteのスペックが一番好感触でした。
メモリが2GB積めず、キーは正方形ではないです。製品には文句無いのですが、将来Let's Noteを使うだろうことが容易に予想できたので、別の製品を選びました。
VAIOはメモリが2GBまで積めます。あとギガビットイーサが使えます。3機種中最軽量なのと、天板が平らで持ち運びがスムーズにできるデザインが一番の魅力です。
CPUがCore Soloで、HDDが1.8インチなのでかなり遅そうです。これは大きなマイナスポイント…。それとキーが正方形ではありません。
VersaProがボンネット構造をやめるか、VAIOのHDDが2.5インチだったらパーフェクトだったんだけど、どのマシンも限界ギリギリまで作りこんでるから簡単には行かないんだろうなあ。
私も含めて日本人は軽くて小さいPCが大好きなので、メーカーさん、これからも頑張ってください。
いきなり寝坊して、昼前に研究所につきました。出だしから既に駄目な感じ。
横須賀って、昼はいかにも平和な地方都市でじーさんばーさんがその辺うろついてるだけなんですけど、夜は暗くて治安悪そうな雰囲気です。この落差は何だろう。やはり米軍の影響か。
今日からYRPに出張です。いざ横須賀へ。借りたマシンへ無線LANのアドホックモードでつないでいるのですが、またしても無線LANの調子が悪いです。以前と全く構成が違うのになぜ…。
ホテルが値段の割にすごく広くて、いわゆるビジネスホテルのシングルルームの倍はあります。ソファーとテーブルなんかも置いてあって、もてあますくらい広いです。部屋がタバコ臭いのがいまいちだなー。
珍しく早起きしたせいか、へんな時間に眠ってしまい、夜中の3時に目が覚めました。この日記を書いたら、また寝ます。
< | 2007 | > | ||||
<< | < | 03 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
合計:
本日: