Melyik a legjobb programozási nyelv erre?
Figyú már, ennél egy kicsit jobbat szeretnék összehozni, hogy mindenki értse mi a lófiszfaxt szeretnék, mint itt delphiben,mert ez nem olvassa a legalsó memória szegmenseket, azaz a rom bios és dos megszakítási vektrokhoz tartozó memória szegmenseket. Hogy néz ki ez VB-ben és hogy elérje ezeket is. Van erre valami gyorsabb és jobb megoldás?
procedure TForm1.Button1Click(Sender: TObject);
type TByteArray = array[0..255] of Byte;
var CurrAddr,i,j : Longword;
s : String;
b : Byte;
ch : Char;
Ofs,Ofs0 : Longword;
LinearAddress :^TByteArray;
begin
PhysAddr:=strtoint64def(edit1.text,0);
if ActiveHW then
begin
LinearAddress:=tviclib.MapPhysToLinear(HW32,PhysAddr,$1000);//256);
CurrAddr:=PhysAddr;
Ofs:=0;
Ofs0:=0;
{ edit1.Clear;}
for j:=1 to 2048 do
begin
b:=LinearAddress^[Ofs0];
Inc(Ofs0);
if b>=$20 then ch:=Char(b) else ch:='.'; s:=s+ch;
end;
memo2.Text:=s;
CurrAddr:=CurrAddr+16;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
HW32 := CloseTVicHW32(HW32);
ActiveHW := FALSE;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HW32 := OpenTVicHW;
ActiveHW := GetActiveHW(HW32);
end;
DE!! necce, ha ez kielégít, de ez csak egy a sok közül megoldás és szeretném végre kicsit hanyagolni a delphizést. Arról nem is beszélve, hogy interruptok meghívására még továbbra sem sikerült találnom egy halovány szösszenetet sem. Radasm is tilt és minden más is kiugat, ahogy belenéztem. Valami okos kerülőút kellene a regiszterértékek kilistázására,de hogy mi VB-ben lövésem sincs hogyan:(
unit RenMemolvas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,TVicLib, StdCtrls,HW_Types,comctrls,ExtCtrls,shellapi;
type
TForm1 = class(TForm)
Button1: TButton;
Memo2: TMemo;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MaxPorts = 4;
var
Form1: TForm1;
implementation
var
hw32:thandle;
ActiveHW : Boolean;
PhysAddr : Longword;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
type TByteArray = array[0..255] of Byte;
var CurrAddr,i,j : Longword;
s : String;
b : Byte;
ch : Char;
Ofs,Ofs0 : Longword;
LinearAddress :^TByteArray;
begin
PhysAddr:=strtoint64def(edit1.text,0);
if ActiveHW then
begin
LinearAddress:=tviclib.MapPhysToLinear(HW32,PhysAddr,$1000);//256);
CurrAddr:=PhysAddr;
Ofs:=0;
Ofs0:=0;
{ edit1.Clear;}
for j:=1 to 2048 do
begin
b:=LinearAddress^[Ofs0];
Inc(Ofs0);
if b>=$20 then ch:=Char(b) else ch:='.'; s:=s+ch;
end;
memo2.Text:=s;
CurrAddr:=CurrAddr+16;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
HW32 := CloseTVicHW32(HW32);
ActiveHW := FALSE;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HW32 := OpenTVicHW;
ActiveHW := GetActiveHW(HW32);
end;
end.
Na végre kezdem érteni mire is gondoltàl.
Alapvetöen az a probléma hogy windows blokkolja a kernel modban futo processzek memoria területét emiatt azokat közvetlenül nem tudod elérni csak valamilyen kernel modban futo alkalmazàs segitségével( pl. valamilyen driver). Ezt sajnos egy c-szerü nyelvben lehet megirni visual studio és Windows Driver kit segitségével. Az ezzel kommunikàlo alkalmazàst meg lehet irni akàr VB.NET-ben : azaz irsz egy dll-t ami kommunikàlni tud a driverrel és aztàn utobbit beimportàlod VB-be és ott megkapod a neked szükséges értékeket, a lényeg az hogy legyen egy kernel modban lévö processzed - egy drivered amivel valamilyen modon kommunikàlni tudj. Sajnàlatos modon ez elég komplikàltà lett téve - de jo okkkal. Ha el lehet érni a hardveres megszakitàsokat közvetlenül akkor egy Windows jelszo kiolvasàsa/modositàsa elég gyorsan menne és ez mondanom se kell elég kellemetlen dolog lenne. Ehhez mindenképpen kell a Windows Driver Kit hogy meg tudd irni a drivert. Utàna a driver elérése mehetne VB-böl is akàr vagy bàrmilyen màs nyelvböl. Sajnos nem egyszerü a dolog csak akkor ha valahonnan sikerülne egy API-t nyilt forràskodban talàlnod amiben van egy kész DLL -SYS fàjl pàros és el tudod inditani azt.
Màsik megoldàs egy pl. virtualbox-ban futo Windows inditàsa debug modban majd a virtuàlis gépre csatlakozni Windbg segitségével és assambly-ben illetve hexaban minden regisztert el tudsz érni és akàr lehetséges plugint is irni hozzà akàr VB-ben is bàr ilyet nem talàltam de pythonban igen. Szerintem utobbi megfelelö lenne szàmodra:
Ezzel garantàltan el tudsz érni minden függvényt és megszakitàst de elég nehéz feladat lesz nagyon bonyolultnak tünik a windows kernel müködése.
Itt pedig a leggyakoribb pluginokat talàlhatod hozzà:
Neked semmi közöd nincs a programozáshoz, csak eljátszod, mintha lenne.
Szegmenseket emlegetsz, holott, védett módban nincsenek ilyenek. Kutyulsz minden fogalmat, a kérdésed pedig totál fals.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!