Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Omvandla ett 2-byte tal till två 1-byte tal

Postades av 2002-08-22 10:09:06 - Mikael Bohlin, i forum visual basic - allmänt, Tråden har 2 Kommentarer och lästs av 394 personer

Jag håller på med ett minnes-sökar program som ska kunna söka efter värden i minnet på en annan process.

Jag kan söka efter 1-byte värden och hitta rätt adress, såhär fungerar det:

I formen har jag en textbox och en knapp (kraftigt förenklat).
I textboxen skriver jag ett värde som jag ska söka efter och trycker på knappen så listas alla värden den hittar i en listbox.

I knappen:

Först öppnar jag processen med hjälp av OpenProcess (jag har ProcessID), flaggan är PROCESS_READ_WRITE_QUERY så att jag kan läsa och skriva till minnet på processen.

Sedan använder jag VirtualQueryEx funktionen för att få BaseAddress och RegionSize av en address.

Regionen läser jag sedan in i en sträng (sBuffer) genom ReadProcessMemory funktionen.

Sedan letar jag i sBuffer efter värdet jag specificerade i textboxen.

För att leta i sBuffer omvandlar jag värdet i textboxen till ASCII tecknet för värdet, sedan använder jag Instr såhär:


tecken = Chr$(Val(Textbox1.Text))
a = 0
Do
a = Instr(a+1, sBuffer, tecken)
If a <> 0 then
' Här listar jag addressen och värdet i en listbox
End If
Loop Until a = 0

Om den inte hittar fler addresser så hoppar den till nästa region och gör samma sak där tills den har sökt igenom alla regioner.

Detta fungerar perfekt och det går SNABBT!

Problemet är när man vill söka efter värden som är större än 1-byte, t.ex 4000 hur omvandlar man det till en 2-byte sträng som jag kan söka efter?

Denna funktion kommer i mitt WinlOOk 2.0 program.
(du kan kolla in WinlOOk 1.0 på min hemsida http://www.geocities.com/cyperium/index.html klicka på BASIC länken).







Svara

Sv: Omvandla ett 2-byte tal till två 1-byte tal

Postades av 2002-08-22 11:10:19 - Andreas Hillqvist

Detta kanske kan vara till hjälp:
<code>
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Function IntegerToString(ByVal Value As Integer) As String
Dim ValueAsString As String * 2

CopyMemory ByVal ValueAsString, Value, 2
IntegerToString = ValueAsString

End Function

Function LongToString(ByVal Value As Long) As String
Dim ValueAsString As String * 4

CopyMemory ByVal ValueAsString, Value, 4
LongToString = ValueAsString

End Function




</code>
Jag skulle skrivit loop lite anorlunda:
<code>

Private Sub Command1_Click()
Dim Pos As Long
Dim Value As Long
Dim Find As String
Dim FindLen As Long

Dim sBuffer As String

'Test Data
sBuffer = Chr$(0) & Chr$(1) & Chr$(2) & Chr$(3) & Chr$(4) & Chr$(5) & Chr$(6) & Chr$(7) & Chr$(8) & Chr$(9)

If IsNumeric(Text1.Text) Then
Value = Val(Text1.Text)
Select Case Value
Case 0 To 255
Find = Chr$(Value)
FindLen = 1
Case -32768 To 32767
Find = IntegerToString(Value)
FindLen = 2
Case -2147483647 To 2147483647
Find = LongToString(Value)
FindLen = 4
Case Else
MsgBox "Number out of scope"
End Select

Pos = InStr(1, sBuffer, Find)
Do While Pos
' Här listar jag addressen och värdet i en listbox
Debug.Print Pos

Pos = InStr(Pos + FindLen, sBuffer, Find)
Loop
Else
MsgBox "Enter a number in Textbox1!"
End If
End Sub



</code>
Exempel på sökningar:<br>
<br>
Text1.Text = "1"<br>
Text1.Text = "3"<br>
Text1.Text = "5"<br>
<br>
Text1.Text = "&H403"<br>
Text1.Text = "&H504"<br>
Text1.Text = "&H605"<br>
<br>
Text1.Text = "&H40302"<br>
Text1.Text = "&H60504"<br>
Text1.Text = "&H90807"<br>
<br>
Text1.Text = "&H5040302"<br>
Text1.Text = "&H7060504"<br>
Text1.Text = "&H9080706"<br>
<br>
<br>
Som du ser är värdena spegelvända. Detta är för att text sökning är ifrån vänster till höger. Du kan använda StrReverse() på antingen sBuffer eller resultatet från IntegerToString() och LongToString().


Svara

Sv: Omvandla ett 2-byte tal till två 1-byte tal

Postades av 2002-08-22 12:38:37 - Mikael Bohlin

Tack så mycket Andreas!

Loopen som du föreslog är ungefär som jag också skulle göra, loopen i exemplet var bara en kraftig förenkling för att man skulle se och förstå vad jag menade.

Tack igen. (att använda CopyMemory var förresten både genialt och kreativt eftersom man direkt får minnets formatering m.m.)


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 606
27 953
271 705
399
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies