资源交流吧:VIP  | 网站首页 | 文章中心 | 下载中心 | 图片中心 | 雁过留声 | 音乐无限 | 互动书吧 | BT下载 | 留学频道 |  {$Wap}
您现在的位置: 九佰度在线 九佰度空间 >> 文章中心 >> 黑客前沿 >> 黑客编程 >> 文章正文 用户登录 新用户注册
完全用VB进行ASM编程的示例         ★★★★ 【字体:


完全用VB进行ASM编程的示例

作者:未知    文章来源:来自网络    点击数:    更新时间:2006-6-7
0
文章作者:Vxk

完全用VB进行ASM编程的示例

                        by Vxk/CVC.GB

下面的例子完全用VB进行ASM编程的示例,本例获得CPU ID.

工程文件分为一个form1.frm 和一个模块module1.bas

---------------------form1.frm的源文件---------------------

CODE:
VERSION 5.00

Begin VB.form form1

Caption       =   "form1"

ClientHeight   =   1965

ClientLeft     =   60

ClientTop     =   345

ClientWidth   =   3105

LinkTopic     =   "form1"

ScaleHeight   =   1965

ScaleWidth     =   3105

StartUpPosition =   2 'Bildschirmmitte

Begin VB.CommandButton Command1

  Caption       =   "Get CPU Name"

  Height       =   495

  Left         =   840

  TabIndex     =   0

  Top         =   315

  Width       =   1425

End

Begin VB.Label Label2

  Alignment     =   2 'Zentriert

  AutoSize     =   -1 'True

  BeginProperty Font

    Name         =   "MS Sans Serif"

    Size         =   9.75

    Charset       =   0

    Weight       =   400

    Underline     =   0   'False

    Italic       =   0   'False

    Strikethrough   =   0   'False

  EndProperty

  Height       =   240

  Left         =   1515

  TabIndex     =   2

  Top         =   1065

  Width       =   60

End

Begin VB.Label Label1

  Alignment     =   2 'Zentriert

  AutoSize     =   -1 'True

  BeginProperty Font

    Name         =   "Arial"

    Size         =   12

    Charset       =   0

    Weight       =   700

    Underline     =   0   'False

    Italic       =   0   'False

    Strikethrough   =   0   'False

  EndProperty

  Height       =   285

  Left         =   1515

  TabIndex     =   1

  Top         =   1350

  Width       =   75

End

End

Attribute VB_Name = "form1"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Option Explicit



Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)



  Label1 = ""

  Label2 = ""



End Sub



Private Sub Command1_Click()

 

  Label1 = GetCpuName() & " CPU"

  Label2 = "You have a" & IIf(InStr("AEIOU", Left$(Label1, 1)), "n", "")



End Sub
[Copy to clipboard]


------------------------------end---------------------------------

下面是modu1e.bas的源代码

----------------------module1.bas的源文件--------------------------

CODE:
Option Explicit

'

'This shows how to incorporate machine code into VB

'''''''''''''''''''''''''''''''''''''''''''''''''''

'The example fills the array with a few machine instructions and then copies

'them to a procedure address. The modified procedure is then called thru

'CallWindowProc. The result of this specific machine code is your CPU Vendor Name.

'

'##########################################################################

'Apparently it gets a Stack Pointer Error, but I don't know why; if anybody

'can fix that please let me know...                 [email]UMGEDV@AOL.COM[/email]

'The Error is not present in the native compiled version; so I think it got

'something to do with the P-Code Calling Convention (strange though)...

'##########################################################################

'

'Sub Dummy serves to reserve some space to copy the machine instructions into.

'

'

'Tested on Intel and AMD CPU's (uncompiled and compiled)

'

'

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

Private x As Long



Public Function GetCpuName() As String



Dim MachineCode(0 To 35) As Byte

Dim VarAddr           As Long

Dim FunctAddr         As Long

Dim EAX             As Long

Dim CPUName(1 To 12)     As Byte



'set up machine code

 

  MachineCode(0) = &H55   'push ebp

 

  MachineCode(1) = &H8B   'move ebp,esp

  MachineCode(2) = &HEC

 

  MachineCode(3) = &H57   'push edi

 

  MachineCode(4) = &H52   'push edx

 

  MachineCode(5) = &H51   'push ecx

 

  MachineCode(6) = &H53   'push ebx

 

  MachineCode(7) = &H8B   'move eax,dword ptr [ebp+8]

  MachineCode(8) = &H45

  MachineCode(9) = &H8

 

  MachineCode(10) = &HF   'cpuid

  MachineCode(11) = &HA2

 

  MachineCode(12) = &H8B   'mov edi,dword ptr [ebp+12]

  MachineCode(13) = &H7D

  MachineCode(14) = &HC

 

  MachineCode(15) = &H89   'move dword ptr [edi],ebx

  MachineCode(16) = &H1F

 

  MachineCode(17) = &H8B   'mov edi,dword ptr [ebp+16]

  MachineCode(18) = &H7D

  MachineCode(19) = &H10

 

  MachineCode(20) = &H89   'move dword ptr [edi],ecx

  MachineCode(21) = &HF

 

  MachineCode(22) = &H8B   'mov edi,dword ptr [ebp+20]

  MachineCode(23) = &H7D

  MachineCode(24) = &H14

 

  MachineCode(25) = &H89   'move dword ptr [edi],edx

  MachineCode(26) = &H17

 

  MachineCode(27) = &H58   'pop ebx



  MachineCode(28) = &H59   'pop ecx



  MachineCode(29) = &H5A   'pop edx



  MachineCode(30) = &H55   'pop edi

 

  MachineCode(31) = &HC9   'leave



  MachineCode(32) = &HC2   'ret 16   I tried everything from 0 to 24

  MachineCode(33) = &H10   '       but all produce the stack error

  MachineCode(34) = &H0

 

  'tell cpuid what we want

  EAX = 0

 

  'get address of Machine Code

  VarAddr = VarPtr(MachineCode(0))

 

  'get address of Sub Dummy

  FunctAddr = GetAddress(AddressOf Dummy)

 

  'copy the Machine Code to where it can be called

  CopyMemory ByVal FunctAddr, ByVal VarAddr, 35 '35 bytes machine code

 

  'call it

  On Error Resume Next 'apparently it gets a stack pointer error when in P-Code but i dont know why

  CallWindowProc FunctAddr, EAX, VarPtr(CPUName(1)), VarPtr(CPUName(9)), VarPtr(CPUName(5))

  'Debug.Print Err; Err.Description

  'MsgBox Err & Err.Description

  On Error GoTo 0

 

  GetCpuName = StrConv(CPUName(), vbUnicode) 'UnicodeName

 

End Function



Private Function GetAddress(Address As Long) As Long



  GetAddress = Address



End Function



Private Sub Dummy()



'the code below just reserves some space to copy the machine code into

'it is never executed



  x = 0

  x = 1

  x = 2

  x = 3

  x = 4

  x = 5

  x = 6

  x = 7

  x = 8

  x = 9

  x = 10

  x = 0

  x = 1

  x = 2

  x = 3

  x = 4

  x = 5

  x = 6

  x = 7

  x = 8

  x = 9

  x = 10



End Sub

[1] [2] 下一页  

文章录入:qq007    责任编辑:qq007 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     本类热门文章
    普通文章泰航空姐在曼谷新国际机场屡11-22
    普通文章俄罗斯最后一颗军事间谍卫星11-22
    普通文章英国成为欧洲最大性奴交易市11-22
    普通文章朝鲜称将坚决报复日本对其实11-22
    普通文章中情局被指谋杀肯尼迪兄弟 11-22
    普通文章布什访问印尼引起大规模抗议11-22
    普通文章东南亚许多儿童成为卖淫活动11-22
    普通文章英国妇女两次怀上三胞胎医学11-22
     最新推荐文章
    普通文章泰航空姐在曼谷新国际机场屡11-22
    普通文章俄罗斯最后一颗军事间谍卫星11-22
    普通文章英国成为欧洲最大性奴交易市11-22
    普通文章朝鲜称将坚决报复日本对其实11-22
    普通文章中情局被指谋杀肯尼迪兄弟 11-22
    普通文章布什访问印尼引起大规模抗议11-22
    普通文章东南亚许多儿童成为卖淫活动11-22
    普通文章英国妇女两次怀上三胞胎医学11-22
     最新文章
    普通文章泰航空姐在曼谷新国际机场屡11-22
    普通文章俄罗斯最后一颗军事间谍卫星11-22
    普通文章英国成为欧洲最大性奴交易市11-22
    普通文章朝鲜称将坚决报复日本对其实11-22
    普通文章中情局被指谋杀肯尼迪兄弟 11-22
    普通文章布什访问印尼引起大规模抗议11-22
    普通文章东南亚许多儿童成为卖淫活动11-22
    普通文章英国妇女两次怀上三胞胎医学11-22
     文章评论(评论内容只代表网友观点,与本站立场无关!发表评论
    007在线工作室 版权所有 未经许可 严禁复制本站页面以及盗取资源链接
    Copyright© 2005-2006 使用800*600像素访问本站将达到最佳效果 苏ICP备05042773号