请问一个问题关于文件写入三部曲
00846714 60 pushad00846715 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地址我前提都已经找到了 ,保存起来备用的。 WriteFile多传了一个参数吧 WriteFile前面那个参数是CreateFile的文件句柄 我觉得这样下面的closehandle就不用在压入参数了 直接调用就好了 这样不可以嘛? 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 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 问题解决了 不是这里出现的问题 是因为WriteFile写入数据还未完成 数据指针被释放引起的 多谢各位~ 折腾了几天 小有成就~ 感谢52的大神们
页:
[1]