私はFASMで簡単なタスクを実行しようとしていますが、これは文字通り約2時間苦労しています。
目標と問題についてコードにコメントしましたが、説明します。
特定のファイルへのパスを変数に保存しようとしています。ファイルはTempDirectoryにあります。したがって、最初に一時パスを取得してから、ファイル名を一時パスの最後に追加する必要があります。
私はこれを2回続けて行おうとしています。しかし、何らかの理由で、結果として得られる文字列は「ねじれた」ものになってしまいます。
私の現在のコードは次のとおりです。
include "win32ax.inc"
entry start
section ".data" data readable writeable
TmpDir rb 256d
aSTR dd ?
bSTR dd ?
cSTR db "aFILE.txt",0
dSTR db "bFILE.txt",0
section ".code" code readable executable
start:
;The goal is to get two seperate strings like so:
;1 - C:\PATH-TO-TEMP-DIR\aFILE.txt in "aSTR"
;2 - C:\PATH-TO-TEMP-DIR\bFILE.txt in "bSTR"
;Get temp directory
invoke GetTempPath,TmpDir,TmpDir
;Copy tempdir into aSTR
invoke lstrcpy,aSTR,TmpDir
;Add "aFILE.txt" to the end of aSTR
invoke lstrcat,aSTR,cSTR
;Copy tempdir into bSTR
invoke lstrcpy,bSTR,TmpDir
;Add "bFILE.txt" to the end of bSTR
invoke lstrcat,bSTR,dSTR
;Results in "C:\UC:\Users\user\AppData\Local\Temp\AppData\Local\Temp\A\\
;Instead of "C:\Users\user\AppData\Local\Temp\aFILE.txt"
invoke MessageBox,0,aSTR,"Test",0
;Results in "C:\Users\user\AppData\Local\Temp\AppData\Local\Temp\A\\"
;Instead of "C:\Users\user\AppData\Local\Temp\bFILE.txt"
invoke MessageBox,0,bSTR,"Test",0
invoke ExitProcess,0
section ".idata" import readable writeable
library kernel32, "KERNEL32.DLL",\
user32, "USER32.DLL"
import kernel32,\
lstrcpy, "lstrcpy",\
lstrcat, "lstrcat",\
GetTempPath, "GetTempPathA",\
ExitProcess, "ExitProcess"
import user32,\
MessageBox, "MessageBoxA"
これを解決するための助けをいただければ幸いです。ありがとう!