⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axd.vbs

📁 realview22.rar
💻 VBS
📖 第 1 页 / 共 5 页
字号:
    End If  

    fmt = GetFormatFromKey(fmtKey)
    If fmtPar = -1 Then
        fmtPar = DefDisplayFormatPar
    End If
    
    call UpdateRegBankList(-1)
    set CurRegBank = GetObjFromKey(RegBankIndex, RegBankList, RegBankNameString, RegBankIDString, index)   
    set RegisterList = CurRegBank.Registers()
    
    count = RegisterList.count
	BankName = CurRegBank.Name
	If BankName = "User" Then
		BankName = "User/System"
	End If
   
    iter = 0
    do while iter < count
        set Register = RegisterList(iter)
        errText = Register.Format(fmt, fmtPar)
        txt = txt & Chr(35) & CStr(iter + 1) & Chr(9) & Register.Name & Chr(9) & errText & chr(13) & chr(10)
        RegNameString = RegNameString &  CStr(Register.Name) & "%" & CStr(iter) & "%"
        iter = iter + 1
    loop
    ListText = "Registers Bank" & Chr(58) & Chr(32) & BankName & chr(13) & chr(10) & regheader & txt
    adw3cli.Display(ListText) 
End Function

'Generic Padd/Remove Function
Function Pad(a, b)
Dim Pads, i
    i = Len(a)
    if i > b Then
        a = mid(a, i-b+1)   'String bigger then b so truncate to b
        i = b
    End If
    Pads = b-i

    i = 0
    do while i < Pads
        a = "0" & a     'Pad zeros
        i = i + 1
    Loop
    Pad = a
End Function

'Function to pad a string with zeros to the next even number 
Function PadEven(a)
Dim l
    l = Len(a)
    l = Int((l+1)/2)*2
    PadEven = Pad(a,l)
End Function

Function Unsigned(a)
    Unsigned = "&h" & HexLong(a)
End Function
' Function to get a full unsigned string representation of a 32bit value , Hex() can't
Function HexLong(a)
Dim word16, upper, lower
Dim Supper, Slower
    word16 = &h10000
    upper = Int(a/word16)
    if upper > 65536 Then
        err.raise 1000, "VBScript", "Specified number or address larger then 0xFFFFFFFF"
    end if
    lower  = a - upper*word16
    Supper = Cstr(Hex(upper))
    Slower = Cstr(Hex(lower))
    HexLong = Pad(Supper,4) & Pad(Slower,4)
End Function

Function Memory(StartAddress, Address, MemSize, MemFormatKey, MemFmtPar)          '<--- CLI command
On Error Resume Next    
    Memory = MemoryInt(StartAddress, Address, MemSize, MemFormatKey, MemFmtPar)
    DisplayError
End Function
    
'Function MemoryInt(StartAddress, Address, MemSize, MemFormat)
Function MemoryInt(StartAddress, Address, MemSize, MemFormatKey, MemFmtPar)
    Dim DesireMemSize
    Dim MemObj, memText, MemRange
    Dim SmallRange, LastTime, Range
    dim iter, LineCount, OffSet
    Dim Pads, iLoop, OutPads, iOutLoop

	If Address = -1 Then
		Address = Chr(43) & CStr(DefMemRange)
	End If
   
    If Left(Address, 1) = Chr(43) Then
        CheckFormat = true
    Else
        checkformat = false
    End If

    If MemSize = -1 Then
        DesireMemSize = DefMemSize
    Else
        DesireMemSize = ConvertMemSize(MemSize)
    End If

'    If MemFormat = -1 Then
'        MemFormat = DefDisplayFormat
'    End If
    MemFormat = GetFormatFromKey(MemFormatKey)

    LastTime = False
    do
        Range = InitRange(SmallRange, LastTime, StartAddress, Address)

    If checkformat = true Then
        If MemSize = 4 Then
            If Range <= 4 Then
                MemRange = 4
            Else
                'MemRange = 4*Fix((Range)/4)
                If (Range Mod 4) = 0 Then
                    MemRange = Range
                Else
'                   MemRange = Range + 1
                    MemRange = Range + (4 - BitsLeft)
                'MemRange = 2*Fix((Range)/2)
                End If

            End If
        ElseIf MemSize = 2 Then
            If Range <= 2 Then
                MemRange = 2
            Else
                If (Range Mod 2) = 0 Then
                    MemRange = Range
                Else
                    MemRange = Range + 1
                'MemRange = 2*Fix((Range)/2)
                End If
            End If
        Else
            MemRange = Range
        End If
    Else
        If MemSize = 4 Then
            If Range <= 4 Then
                MemRange = 4
            Else
                BitsLeft = Range Mod 4
                If BitsLeft = 0 Then
                    MemRange = Range
                Else
                    MemRange = Range + (4 - BitsLeft)
                'MemRange = 2*Fix((Range)/2)
                End If
                'MemRange = 4*Fix((Range + 4)/4)
            End If
        ElseIf MemSize = 2 Then
            If Range <= 2 Then
                MemRange = 2
            Else
                If (Range Mod 2) = 0 Then
                    MemRange = Range
                Else
                    MemRange = Range + 1
                End If
'               MemRange = 2*Fix((Range + 2)/2)
            End If
        Else
            MemRange = Range
        End If
    End If
        set MemObj = currentthread.CreateMemory(StartAddress, MemRange)
' PM 64863 create memory uses "create and update" - we don't need create and read
'        MemObj.GetFromTarget

        ret = Round(CLng(MemRange)/16)
        ' now work out how many loops we need.
        If ret * 16 < CLng(MemRange) Then
            LineCount = ret
        ElseIf ret = 0 Then
            LineCount = 1
        Else
            LineCount = ret -1
        End If
        iter = 0
        OffSet = 0
        do while iter < LineCount 
            memText = MemObj.Format(MemFormat, MemFmtPar, DesireMemSize, OffSet, 16)
            FormatAddress  = "0x" & HexLong(StartAddress + OffSet)
            outText = FormatAddress & Chr(9) & memText & chr(13) & chr(10)
            If adw3cli.Display(outText) = 0 Then    'user aborted
                Exit Function
            End If 
            OffSet = OffSet + 16
            iter = iter + 1
        loop
        BytesRemain = Clng(MemRange) - LineCount*16    
        If BytesRemain >= 0 Then
            FormatAddress  = "0x" & HexLong(StartAddress + OffSet)
            memText = MemObj.Format(MemFormat, MemFmtPar, DesireMemSize, OffSet, BytesRemain)
            outText = FormatAddress & Chr(9) & memText & chr(13) & chr(10)
            If adw3cli.Display(outText) = 0 Then 'user aborted
                Exit Function
            End If
        End If   
        If LastTime Then
            Exit Function
        End If
        StartAddress = Unsigned(StartAddress + Range)
        Address = Unsigned(Address) 
        set MemObj = Nothing
    Loop
End Function

Function FillMem(StartAddress, Address, NewValue, RequiredMemSize)      '<--- CLI command
On Error Resume Next    
    FillMem = FillMemInt(StartAddress, Address, NewValue, RequiredMemSize)
    DisplayError
End Function

Function FillMemInt(StartAddress, Address, NewValue, RequiredMemSize)
    Dim MemObj, MemRange, DesireMemSize
    Dim SmallRange, LastTime
    
    If RequiredMemSize = -1 Then
        DesireMemSize = DefMemSize
    Else
        DesireMemSize = ConvertMemSize(RequiredMemSize)
    End If

    If Left(Address, 1) = Chr(43) Then
        CheckFormat = true
    Else
        checkformat = false
    End If

    If CheckFormat = false Then
    
        If RequiredMemSize = 4 Then
            address = 4*Fix((address + 4)/4)
        ElseIf RequiredMemSize = 2 Then
            address = 2*Fix((address + 2)/2)
        Else
            address = address
        End If
    End If

	If Left(NewValue, 1) = Chr(37) Then				'^, but changed to %
		NewValue = ExprToAddress(NewValue)
	End If

    LastTime = False   

    do
        MemRange = InitRange(SmallRange, LastTime, StartAddress, Address)    

        currentthread.FillMemory StartAddress, MemRange, NewValue, DesireMemSize
        
        If LastTime Then
            Exit Function
        End If
        AddressFound = "0x" & HexLong(StartAddress) & " - 0x" & HexLong(StartAddress+MemRange) & chr(13) & chr(10)
        If adw3cli.Display(AddressFound) = 0 Then 'user aborted
            Exit Function
        End If
        StartAddress = Unsigned(StartAddress+MemRange)
        Address = Unsigned(Address)
    Loop
End Function

''''''
' set the memory locateion at expr1 to the value given.
'''''''''
Function SetMem(StartAddress, NewValue, MemSize)        '<--- CLI command
On Error Resume Next    
    SetMem = SetMemInt(StartAddress, NewValue, MemSize)
    DisplayError
End Function

Function SetMemInt(StartAddress, NewValue, MemSize)
    Dim MemRange, DesireMemSize

    StartAddress = ExprToAddress(StartAddress)

    If MemSize = -1 Then
        DesireMemSize = DefMemSize
    Else
        DesireMemSize = ConvertMemSize(MemSize)
    End If

    call GetRange(StartAddress, StartAddress+DesireMemSize-1)
    NewValue = Unsigned(ExprToAddress(NewValue))
    currentthread.FillMemory StartAddress, DesireMemSize, NewValue, DesireMemSize
End Function

' function to calculate range and overcomes problem with signed arithemetic with unsigned
Function GetRange(StartAddr, EndAddr)
    Dim y, z, Range
        y=-2147483648
        z=2147483647
    
    Range = EndAddr - StartAddr

    If EndAddr < 0 and StartAddr >= 0  Then
        y= Endaddr - y
        z= z - StartAddr
        Range = y + z + 1
    End If
    If EndAddr >= 0 and StartAddr < 0 Then
        Range = -1
    End If

    If Range < 0 Then   
        err.raise 1000, "VBScript", "Invalid Range Specified."
    End If

    GetRange = Range
End Function
    
Function FindValue(SearchString, StartAddress, EndAddress)
On Error Resume Next    
    FindValue = FindValueInt(SearchString, StartAddress, EndAddress)
    DisplayError
End Function

Function InitRange(SmallRange, LastTime, StartAddress, EndAddress)
        SmallRange = &h10000        '64k is jugged to be best compromise
        LastTime = False 
        InitRange = ComRange(StartAddress, EndAddress)
        If InitRange > SmallRange Then
            InitRange = SmallRange
        Else
            LastTime = True
        End if
End Function

Function FindValueInt(SearchString, StartAddress, EndAddress)
    Dim MemObj, AddressFound, InString, Range 
    Dim SmallRange, LastTime
        
    InString = "&h" & PadEven(Hex(ExprToAddress(SearchString)))
    LastTime = False

    do      
        Range = InitRange(SmallRange, LastTime, StartAddress, EndAddress)

        set MemObj = CurrentThread.CreateMemory(StartAddress, Range)
'        MemObj.GetFromTarget
        
        if LastTime Then
            AddressFound = MemObj.FindInMemory(InString, StartAddress) 
        Else
            AddressFound = "0x" & HexLong(StartAddress) & " - 0x" & HexLong(StartAddress+Range) & "  "
            AddressFound = AddressFound & MemObj.FindInMemory(InString, StartAddress) 
        End If
    
        If adw3cli.Display(AddressFound) = 0 Then 'user aborted
            Exit Function
        End If
        
        If LastTime Then
            Exit Function
        End If
        set MemObj = Nothing
        StartAddress = Unsigned(StartAddress+Range)
        EndAddress   = Unsigned(EndAddress)
    Loop
End Function
        
' routine to translate comand parameters to range and addresses
' a1 - Start Address, 
' a2 - End address (it is converted to End Address if range input)
' a2 - End address (according to v1.1, it is not covered to end address if range input)
Function ComRange(a1, a2)   
    Dim ParseVal, Range
    a1   = ExprToAddress(a1)
    ParseVal = a2
    Range = Parse(ParseVal)
    If Range = "Range" Then
        ComRange = GetRange(0, ExprToAddress(ParseVal)) 
        a2 = a1 + ComRange - 1
    Else
        a2   = ExprToAddress(a2)

        If a1 = -1  and a2 = -1 Then            'full range specified
            a1 = 0
            a2   = &hffffffff
        End If
        ComRange = GetRange(a1, a2) + 1
    End If
End Function

Function FindString(SearchString, StartAddress, EndAddress)
On Error Resume Next    
    FindString = FindStringInt(SearchString, StartAddress, EndAddress)
    DisplayError
End Function

Function FindStringInt(SearchString, StartAddress, EndAddress)
    Dim MemObj, AddressFound, Range
    Dim SmallRange, LastTime
    LastTime = False
    
    do 
        Range = InitRange(SmallRange, LastTime, StartAddress, EndAddress)
    
        set MemObj = CurrentThread.CreateMemory(StartAddress, Range)
'        MemObj.GetFromTarget
    
        if LastTime Then
            AddressFound = MemObj.FindInMemory(SearchString, StartAddress) 
        Else
            AddressFound = "0x" & HexLong(StartAddress) & " - 0x" & HexLong(StartAddress+Range) & "  "
            AddressFound = AddressFound & MemObj.FindInMemory(SearchString, StartAddress) 
        End If
    
        If adw3cli.Display(AddressFound) = 0 Then 'user aborted
                Exit Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -