易码技术论坛

 找回密码
 加入易码
搜索
查看: 549445|回复: 10

6502反汇编软件VB代码!

[复制链接]
发表于 2005-1-12 17:53:00 | 显示全部楼层
原作sippey

收藏品

[此贴子已经被作者于2005-1-13 16:15:11编辑过]

发表于 2005-1-12 19:07:00 | 显示全部楼层
是老S这家伙的没错,很久没碰上这个夜猫了,想跟他聊聊都没机会呀~~
正好那这个工具为在下要发的下一帖服务,嘿嘿~~
发表于 2005-1-13 01:50:00 | 显示全部楼层
名字似乎打错了,我记得应该是sipper吧。
发表于 2005-1-13 11:13:00 | 显示全部楼层
我记得是Sippey吧……
发表于 2005-1-13 13:42:00 | 显示全部楼层
汗死。Sippey是很久没逛坛子了,大家也不必这样吧~
发表于 2005-1-13 16:17:00 | 显示全部楼层
晕s~
看来名字还是取个好记一点的好
发表于 2005-1-14 12:05:00 | 显示全部楼层
呵呵
VB我不会啊!
不过大概能看懂
case ...
t???+"LDA"+t???
&$%%^*(
呵呵 似乎挺简单哦
发表于 2005-1-14 18:20:00 | 显示全部楼层
晕倒~~在下务必灌这个水,因为这个家伙是很久很久就进星界的,而且是个好家伙!
所以他的名字大家要记住:
                           Sippey
----以前程序站的夜猫!
他看了这个贴一定会晕死的![em05]
发表于 2005-2-10 20:55:00 | 显示全部楼层
吼吼~~原代码在这啊,呵呵找到了
发表于 2005-3-12 16:53:00 | 显示全部楼层
靠  我的垃圾代码被帖上来了 郁闷

弄了一堆case 效率很低的啊 不过凑合能用 呵呵
 楼主| 发表于 2005-1-12 17:52:11 | 显示全部楼层 |阅读模式





代码:

Function DisAssemble2SFile(InFile As String, OutFile As String, InStart As Long, OutStart As Long) As String
On Error Resume Next

Dim ArrPtr As Long
Dim BinArr() As Byte
Dim FLen As Long
Dim TmpLine1 As String
Dim TmpLine2 As String

Dim TmpByte As Byte

Open InFile For Binary As #1
Open OutFile For Output As #2

FLen = LOF(1)

ReDim BinArr(FLen - InStart - 1) As Byte

Get #1, InStart + 1, BinArr()

ArrPtr = 0

Do Until ArrPtr > FLen - InStart - 1

TmpByte = BinArr(ArrPtr)

TmpLine1 = "$" & HexPlus4(ArrPtr + OutStart) & ">  "  '"$8000>  "

Select Case TmpByte

Case &H71, &H31, &HD1, &H51, &HB1, &H11, &HF1, &H91
'IND,Y
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
TmpLine2 = " ($" & HexPlus2(BinArr(ArrPtr + 1)) & ") ,Y     ;"
ArrPtr = ArrPtr + 2

Case &H61, &H21, &HC1, &H41, &HA1, &H1, &HE1, &H81
'IND,X
'TmpLine1 = TmpLine1 & Hexplus2(TmpByte) & " " & Hexplus2(BinArr(ArrPtr + 1)) & " " & Hexplus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
TmpLine2 = " ($" & HexPlus2(BinArr(ArrPtr + 1)) & " ,X)     ;"
ArrPtr = ArrPtr + 2

Case &H6D, &HCC, &H2D, &HE, &H2C, &HCD, &HEC, &HEC, &HCE, &H40, &HEE, &H4C, &HAD, &HAE, &HAC, &H4E, &HD, &H2E, &H6E, &HED, &H8D, &H8E, &H8C
'ABS-INT-JSR
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & "        ;"
ArrPtr = ArrPtr + 3

Case &H0
'INT
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine2 = " $00,$" & HexPlus2(BinArr(ArrPtr + 1)) & ",$" & HexPlus2(BinArr(ArrPtr + 2)) & "  ; " & SysFuncAI(&H0, HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)))
'TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) &  HexPlus2(BinArr(ArrPtr + 1)) & "        ; " & SysFuncAI(&H0, HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)))

ArrPtr = ArrPtr + 3

Case &H20
'JSR
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & "        ; " & SysFuncAI(&H20, HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)))
ArrPtr = ArrPtr + 3


Case &H7D, &H3D, &H1E, &HDD, &HDE, &H5D, &HFE, &HBD, &HBC, &H5E, &H1D, &H3E, &H7E, &HFD, &H9D
'ABSX
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ,X     ;"
ArrPtr = ArrPtr + 3

Case &H79, &H39, &HD9, &H59, &HB8, &HBE, &H19, &HF9, &H99
'ABSY
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ,Y     ;"
ArrPtr = ArrPtr + 3

Case &HA, &H4A, &H2A, &H6A
'ACM
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & "        : "
TmpLine2 = "              ;"
'TmpLine2 = " A            ;"
ArrPtr = ArrPtr + 1

Case &H69, &H29, &HC0, &HC9, &HE0, &HE0, &H49, &HA9, &HA2, &HA0, &H9, &HE9
'IM
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
TmpLine2 = " #$" & HexPlus2(BinArr(ArrPtr + 1)) & "         ;"
ArrPtr = ArrPtr + 2

Case &H18, &HD8, &H58, &HB8, &HCA, &H88, &HE8, &HC8, &HEA, &H48, &H8, &H68, &H28, &H4D, &H60, &H38, &HF8, &H78, &HAA, &HA8, &HBA, &H8A, &H9A, &H98
'IMP
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & "        : "
TmpLine2 = "              ;"
ArrPtr = ArrPtr + 1

Case &H6C
'IND..only jmp
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & "  : "
TmpLine2 = " ($" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & ")      ;"
ArrPtr = ArrPtr + 3

Case &H90, &HB0, &HF0, &H30, &HD0, &H10, &H50, &H70
'RLT
'??
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
'''TmpLine2 = " $" & HexPlus4(ArrPtr + OutStart + 2 + ((128 + BinArr(ArrPtr + 1)) Mod 255) - 128) & "        ;"
TmpLine2 = " L" & HexPlus4(ArrPtr + OutStart + 2 + ((128 + BinArr(ArrPtr + 1)) Mod 256) - 128) & "        ;"
ArrPtr = ArrPtr + 2

Case &H65, &H25, &H6, &HC4, &H24, &HC5, &HE4, &HE4, &HC6, &H45, &HE6, &HA5, &HA6, &HA4, &H46, &H5, &H26, &H66, &HE5, &H85, &H86, &H84
'ZP
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 1)) & "          ;"
ArrPtr = ArrPtr + 2

Case &H75, &H35, &H16, &HD5, &HD6, &H55, &HF6, &HB5, &HB4, &H56, &H15, &H36, &H76, &HF5, &H95, &H94
'ZPX
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 1)) & " ,X       ;"
ArrPtr = ArrPtr + 2

Case &HB6, &H96
'ZPY
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & "     : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 1)) & " ,Y       ;"
ArrPtr = ArrPtr + 2

Case Else
'UNKNOW
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & "        : "
TmpLine2 = ".DB " & HexPlus2(TmpByte) & "           ;unrecognize code"
ArrPtr = ArrPtr + 1


End Select


Select Case TmpByte
Case &H71, &H61, &H6D, &H7D, &H79, &H69, &H65, &H75
'ADC
TmpLine1 = TmpLine1 & "ADC" & TmpLine2

Case &H31, &H21, &H2D, &H3D, &H39, &H29, &H25, &H35
'AND
TmpLine1 = TmpLine1 & "AND" & TmpLine2

Case &HE, &H1E, &HA, &H6, &H16
'ASL
TmpLine1 = TmpLine1 & "ASL" & TmpLine2

Case &H90
'BCC
TmpLine1 = TmpLine1 & "BCC" & TmpLine2

Case &HB0
'BCS
TmpLine1 = TmpLine1 & "BCS" & TmpLine2

Case &HF0
'BEQ
TmpLine1 = TmpLine1 & "BEQ" & TmpLine2

Case &H30
'BMI
TmpLine1 = TmpLine1 & "BMI" & TmpLine2

Case &HD0
'BNE
TmpLine1 = TmpLine1 & "BNE" & TmpLine2

Case &H10
'BPL
TmpLine1 = TmpLine1 & "BPL" & TmpLine2

Case &H50
'BVC
TmpLine1 = TmpLine1 & "BVC" & TmpLine2

Case &H70
'BVS
TmpLine1 = TmpLine1 & "BVS" & TmpLine2

Case &H2C, &H24
'BIT
TmpLine1 = TmpLine1 & "BIT" & TmpLine2

Case &H18
'CLC
TmpLine1 = TmpLine1 & "CLC" & TmpLine2

Case &HD8
'CLD
TmpLine1 = TmpLine1 & "CLD" & TmpLine2

Case &H58
'CLI
TmpLine1 = TmpLine1 & "CLI" & TmpLine2

Case &HB8
'CLV
TmpLine1 = TmpLine1 & "CLV" & TmpLine2

Case &HD1, &HC1, &HCD, &HDD, &HD9, &HC9, &HC5, &HD5
'CMP
TmpLine1 = TmpLine1 & "CMP" & TmpLine2

Case &HEC, &HE0, &HE4
'CPX
TmpLine1 = TmpLine1 & "CPX" & TmpLine2

Case &HC0, &HC4, &HCC
'CPY
TmpLine1 = TmpLine1 & "CPY" & TmpLine2

Case &HCE, &HDE, &HC6, &HD6
'DEC
TmpLine1 = TmpLine1 & "DEC" & TmpLine2

Case &HCA
'DEX
TmpLine1 = TmpLine1 & "DEX" & TmpLine2

Case &H88
'DEY
TmpLine1 = TmpLine1 & "DEY" & TmpLine2

Case &H51, &H41, &H40, &H5D, &H59, &H49, &H45, &H55
'EOR
TmpLine1 = TmpLine1 & "EOR" & TmpLine2

Case &HEE, &HFE, &HE6, &HF6
'INC
TmpLine1 = TmpLine1 & "INC" & TmpLine2

Case &H0
'INT
'TmpLine1 = TmpLine1 & "INT" & TmpLine2
TmpLine1 = TmpLine1 & ".DB" & TmpLine2

Case &HE8
'INX
TmpLine1 = TmpLine1 & "INX" & TmpLine2

Case &HC8
'INY
TmpLine1 = TmpLine1 & "INY" & TmpLine2

Case &H4C, &H6C
'JMP
TmpLine1 = TmpLine1 & "JMP" & TmpLine2

Case &H20
'JSR
TmpLine1 = TmpLine1 & "JSR" & TmpLine2

Case &HB1, &HA1, &HAD, &HBD, &HB8, &HA9, &HA5, &HB5
'LDA
TmpLine1 = TmpLine1 & "LDA" & TmpLine2

Case &HAE, &HBE, &HA2, &HA6, &HB6
'LDX
TmpLine1 = TmpLine1 & "LDX" & TmpLine2

Case &HAC, &HBC, &HA0, &HA4, &HB4
'LDY
TmpLine1 = TmpLine1 & "LDY" & TmpLine2

Case &H4E, &H5E, &H4A, &H46, &H56
'LSR
TmpLine1 = TmpLine1 & "LSR" & TmpLine2

Case &HEA
'NOP
TmpLine1 = TmpLine1 & "NOP" & TmpLine2

Case &H11, &H1, &HD, &H1D, &H19, &H9, &H5, &H15
'ORA
TmpLine1 = TmpLine1 & "ORA" & TmpLine2

Case &H48
'PHA
TmpLine1 = TmpLine1 & "PHA" & TmpLine2

Case &H8
'PHP
TmpLine1 = TmpLine1 & "PHP" & TmpLine2

Case &H68
'PLA
TmpLine1 = TmpLine1 & "PLA" & TmpLine2

Case &H28
'PLP
TmpLine1 = TmpLine1 & "PLP" & TmpLine2

Case &H2E, &H3E, &H2A, &H26, &H36
'ROL
TmpLine1 = TmpLine1 & "ROL" & TmpLine2

Case &H6E, &H7E, &H6A, &H66, &H76
'ROR
TmpLine1 = TmpLine1 & "ROR" & TmpLine2

Case &H4D
'RTI
TmpLine1 = TmpLine1 & "RTI" & TmpLine2

Case &H60
'RTS
TmpLine1 = TmpLine1 & "RTS" & TmpLine2

Case &HF1, &HE1, &HED, &HFD, &HF9, &HE9, &HE5, &HF5
'SBC
TmpLine1 = TmpLine1 & "SBC" & TmpLine2

Case &H38
'SEC
TmpLine1 = TmpLine1 & "SEC" & TmpLine2

Case &HF8
'SED
TmpLine1 = TmpLine1 & "SED" & TmpLine2

Case &H78
'SEI
TmpLine1 = TmpLine1 & "SEI" & TmpLine2

Case &H91, &H81, &H8D, &H9D, &H99, &H85, &H95
'STA
TmpLine1 = TmpLine1 & "STA" & TmpLine2

Case &H8E, &H86, &H96
'STX
TmpLine1 = TmpLine1 & "STX" & TmpLine2

Case &H8C, &H84, &H94
'STY
TmpLine1 = TmpLine1 & "STY" & TmpLine2

Case &HAA
'TAX
TmpLine1 = TmpLine1 & "TAX" & TmpLine2

Case &HA8
'TAY
TmpLine1 = TmpLine1 & "TAY" & TmpLine2

Case &HBA
'TSX
TmpLine1 = TmpLine1 & "TSX" & TmpLine2

Case &H8A
'TXA
TmpLine1 = TmpLine1 & "TXA" & TmpLine2

Case &H9A
'TXS
TmpLine1 = TmpLine1 & "TXS" & TmpLine2

Case &H98
'TYA
TmpLine1 = TmpLine1 & "TYA" & TmpLine2
Case Else
TmpLine1 = TmpLine1 & TmpLine2

End Select

Print #2, TmpLine1

Loop


Close
End Function


您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-5 08:56 , Processed in 0.012997 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表