Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 20th, 2012  |  syntax: None  |  size: 2.27 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ;MASMPlus 代码模板 - 控制台程序
  2. ;link: /SUBSYSTEM:CONSOLE /nologo /SECTION:.text,RWE /MERGE:.rdata=.text /MERGE:.data=.text
  3. .686
  4. .model flat, stdcall
  5. option casemap :none
  6.  
  7. include windows.inc
  8. include kernel32.inc
  9. include masm32.inc
  10.  
  11. includelib kernel32.lib
  12. includelib masm32.lib
  13. include macro.asm
  14.  
  15. .data
  16.         ddMagicNumbers dd 576,2838748,9760642,13925733,21502882, \
  17.                                                         30222582,35811704,41345235,45306303, \
  18.                                                         54451205,66477898,75360464,84057730, \
  19.                                                         91119754,97171761,99622608,108506849, \
  20.                                                         117227799
  21.        
  22.         NNums equ lengthof ddMagicNumbers - 1
  23.         ddNNums dd NNums
  24.        
  25.         sCantOpen db "无法打开pack01.pak,请把此程序放到游戏的resource目录里运行!", 13, 10, 0
  26.         sCantWrite db "无法以写入方式打开文件!请尝试使用管理员权限运行本程序!", 13, 10, 0
  27.         sWriting db "正在写入 "
  28.         sSongName db "00.ogg"
  29.         sTail db " ...", 13, 10, 0
  30.        
  31. .data?
  32.         pBuf            dd ?
  33.         hDataFile dd ?
  34.         ddJunk dd ?
  35. .CODE
  36.        
  37. ErrMsg proc pMsg:DWORD
  38.         invoke StdOut, pMsg
  39.         invoke StdIn, offset ddJunk, 3
  40.         invoke ExitProcess, 1
  41.         ret
  42. ErrMsg endp
  43.        
  44. START:
  45.         invoke CreateFile, offset CTEXT("pack01.pak"), GENERIC_READ, FILE_SHARE_READ OR FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
  46.         .if eax == -1
  47.                 invoke ErrMsg, offset sCantOpen
  48.         .endif
  49.         mov hDataFile, eax
  50.        
  51.         invoke VirtualAlloc,NULL,15*1024*1024,MEM_COMMIT,PAGE_READWRITE
  52.         mov pBuf, eax
  53.        
  54.         lea esi, ddMagicNumbers
  55.         lodsd
  56.         mov ebx, eax ; ebx <- this postition
  57.         .while ddNNums
  58.                 lodsd
  59.                 mov edi, eax ; edi <- next position
  60.                
  61.                 invoke SetFilePointer, hDataFile, ebx, NULL, FILE_BEGIN
  62.                
  63.                 mov edx, edi
  64.                 sub edx, ebx ; <- size
  65.                 invoke ReadFile,hDataFile, pBuf, edx, offset ddJunk,NULL
  66.                
  67.                
  68.                 mov eax, NNums
  69.                 sub eax, ddNNums
  70.                 inc eax
  71.                 cmp eax, 0ah
  72.                 jl @F
  73.                 add eax, 0F6h
  74.                 @@:
  75.                 bswap eax
  76.                 shr eax, 16
  77.                 add ax, '00'
  78.                 mov WORD ptr sSongName, ax
  79.                 mov BYTE ptr sTail, ' '
  80.                 invoke StdOut, offset sWriting
  81.                 mov BYTE ptr sTail, 0
  82.                 invoke CreateFile, offset sSongName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
  83.                 push eax ; pair with CloseHandle
  84.                 .if eax == -1
  85.                         invoke ErrMsg, offset sCantWrite
  86.                 .endif
  87.                 mov edx, edi
  88.                 sub edx, ebx ; <- size
  89.                 invoke WriteFile, eax, pBuf, edx, offset ddJunk, NULL
  90.                 call CloseHandle
  91.                 mov ebx, edi ; next one
  92.                 dec ddNNums
  93.         .endw
  94.         ret
  95. end START