掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WriteFileの引数const Bufferとは何ですか? (ID:18786)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
const Bufferの場合、内部ではポインタが渡されています。 要点はそこだけです。 たとえ、引数がBYTE型の変数でも、その変数を格納しているアドレスが渡されることになります。 strValue[1]と、PCHAR(strValue)^の違いは、内部でUniqueStringを使うか、LStrToPCharを使うかの違いです。戻り値は(ほぼ)同じです。 結果として、eaxに文字列へのポインタが返り、それをPUSHしています。 CPUウィンドウで確認すると、 ----------------------------------------- WriteFile(hFile, strValue[1], intLen, dwDummy, nil); //nilをpush push $00 //dwDummyをpush lea eax, [ebp-$20] push eax //intLenをpush push esi //strValue[1]をpush lea eax, [ebp-$1c] call @UniqueStringA push eax //hFileをpush push ebx //WriteFileを呼び出す call WriteFile ----------------------------------------- WriteFile(hFile, PCHAR(strValue)^, intLen, dwDummy, nil); //nilをpush push $00 //dwDummyをpush lea eax, [ebp-$20] push eax //intLenをpush push esi //strValue[1]をpush mov eax,[ebp-$1c] call @LStrToPChar push eax //hFileをpush push ebx //WriteFileを呼び出す call WriteFile ----------------------------------------- となります。 それでは、文字列を直接した場合はどうなるかというと、 WriteFile(hFile, 'abcde', intLen, dwDummy, nil); //nilをpush push $00 //dwDummyをpush lea eax, [ebp-$20] push eax //intLenをpush push esi //strValue[1]をpush push $004bdda4 ('abcde'の'a'へのポインタ。ここのアドレスからabcdeと格納されている) //hFileをpush push ebx //WriteFileを呼び出す call WriteFile となり、さらにシンプルになります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.