player43 发表于 2020-3-26 13:52

请问一个问题关于文件写入三部曲

00846714    60                  pushad
00846715    9C                  pushfd
00846716    55                  push ebp
00846717    8BEC                  mov ebp,esp
00846719    83EC 20            sub esp,0x20
0084671C    A1 AC638400    mov eax,dword ptr ds:   //文件名
00846721    83F8 00             cmp eax,0x0
00846724    74 3E               je short XZM.00846764
00846726    6A 00               push 0x0
00846728    6A 00               push 0x0
0084672A    6A 02               push 0x2
0084672C    6A 00               push 0x0
0084672E    6A 00                   push 0x0
00846730    68 00000040      push 0x40000000
00846735    FF35 AC638400    push dword ptr ds:   
0084673B    8B45 34                mov eax,dword ptr ss:   //CreateFileA
0084673E    FFD0                     call eax
00846740    83F8 FF               cmp eax,-0x1
00846743    74 1A                  je short XZM.0084675F
00846745    50                         push eax
00846746    6A 00                  push 0x0
00846748    68 E0638400         push XZM.008463E0
0084674D    FF35 A4638400    push dword ptr ds://文件长度
00846753    FF35 A0638400    push dword ptr ds://文件数据
00846759    50                         push eax
0084675A    8B45 30               mov eax,dword ptr ss: //WriteFile
0084675D    FFD0                  call eax
0084675F    8B45 2C               mov eax,dword ptr ss: //CloseHandle
00846762    FFD0                  call eax
00846764    83C4 20               add esp,0x20
00846767    8BE5                  mov esp,ebp
00846769    5D                     pop ebp                                 
0084676A    9D                     popfd
0084676B    61                        popad
0084676C    C2 0C00               retn 0xC

这是我自己写的一段保存文件的三部曲 请问我这里有什么错误嘛?
我调试一个软件 ,自己patch这一段, 不调用这段功能都正常, 一旦调用这段代码就会C0000005异常退出了。 牛人给分析分析 哪里错了嘛 ,那些API地址我前提都已经找到了 ,保存起来备用的。

古月不傲 发表于 2020-3-26 14:27

WriteFile多传了一个参数吧

player43 发表于 2020-3-26 15:05

WriteFile前面那个参数是CreateFile的文件句柄 我觉得这样下面的closehandle就不用在压入参数了 直接调用就好了 这样不可以嘛?

罗萨 发表于 2020-3-26 18:16

004B90B0|.50            PUSH EAX                                                      ; |pBytesWritten
004B90B1|.6A 0C         PUSH 0C                                                      ; |nBytesToWrite = C (12.)
004B90B3|.8D4424 10   LEA EAX,DWORD PTR SS:            ; |
004B90B7|.50            PUSH EAX                                                         ; |Buffer
004B90B8|.8B07          MOV EAX,DWORD PTR DS:                  ; |
004B90BA|.50            PUSH EAX                                                       ; |hFile
004B90BB|.E8 9CDDF4FF   CALL 00406E5C                            ; \WriteFile

罗萨 发表于 2020-3-26 18:18

0042141A|.8D45 10       lea   eax, dword ptr
0042141D|>6A 00         push    0                              ; /pOverlapped = NULL
0042141F|.50            push    eax                              ; |pBytesWritten
00421420|.FF75 0C       push    dword ptr                 ; |nBytesToWrite
00421423|.FF75 08       push    dword ptr                 ; |Buffer
00421426|.FF31          push    dword ptr                   ; |hFile
00421428|.FF15 50724700 call    dword ptr [<&KERNEL32.WriteFile>>; \WriteFile

player43 发表于 2020-3-28 10:29

问题解决了 不是这里出现的问题 是因为WriteFile写入数据还未完成 数据指针被释放引起的 多谢各位~ 折腾了几天 小有成就~ 感谢52的大神们
页: [1]
查看完整版本: 请问一个问题关于文件写入三部曲