当前位置:主页>销售管理软件> 列表

exe内数值数据读取 找服装销售管理软件

财务软件版1楼: 使用BlockRead函数读取exe内的数值数据
地址为自定义
例如我想读取$80D421处的964E显示到Edit1内为20118该如何做
还有读取的数据不一定是2位的,可能只有1位(例如:02),也有可能是多位(例如:38C101)
希望能有个详细的解释,感谢

function ReadByte(Filename: String;RStart,Rlen:Integer): String;
//Filename:文件路径
//RStart:读取地址
//Rlen:读取长度
var
Buf: array[0..64] of Char;
f:file;
begin
fillchar(Buf,SizeOf(Buf),0);
Assignfile(f,Filename);
reset(f,1);
seek(f,RStart);
blockread(f,buf,Rlen);
Result:=buf;
Closefile(f);
end;

2楼: 顶上什么意思?

是不是一个exe运行中,另一个程序读该exe的内存空间? 如管家婆财务软件教程

3楼: 搞个blockread的例子

var

FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
if SaveDialog1.Execute then { Display Save dialog box}
begin
AssignFile(ToF, SaveDialog1.FileName); { Open output file }

Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, ''Copying '' + IntToStr(FileSize(FromF))
+ '' bytes...'');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
end;
end;

4楼: 我想知道的是怎么读取exe里的数值信息
上面说的应该很清楚了
读取$80D421处的964E显示到Edit1内为20118
顺序读取可以,但我想实现高低换位
还有读取的数据不一定是2位的,可能只有1位(例如:02),也有可能是多位(例如:38C101)

5楼: 帮顶!

-------------------------------------
站长开发推广同盟 关注网站,关注技术!

海量源代码下载,二次开发绝佳站点



网址: http://www.source520.com
http://www.source520.net

6楼: 楼主是想读取静态EXE文件里的内容,还是EXE运行时的内容呢(类似FPE)?
内容的转换,最好先看看汇编

财务软件版7楼: ==>>我想知道的是怎么读取exe里的数值信息
上面说的应该很清楚了
读取$80D421处的964E显示到Edit1内为20118
=================================
读取数值信息,你要先知数值信息在EXE(二进制文件)内的偏移量,如不知道的话就
很难定位了。
假如我要在二进制文件里读取三个数值数据,并知道其偏移量。
API, stream, blockread,都行。
API:
function ReadCount(const HF: HFILE; const Offset: DWORD): DWORD;
var
Num: DWORD;
lpBuf: DWORD;
begin
try
SetFilePointer(HF, Offset, nil, FILE_CURRENT);
if ReadFile(HF, lpBuf, SizeOf(Offset), Num, nil) then
Result := lpBuf
else
Result := 0;
SetFilePointer(HF, 0, nil, FILE_BEGIN);
except
Result := GetLastError;
end;

var
HF: HFILE;
begin
HF := Windows.CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or SPECIFIC_RIGHTS_ALL, 0);
if HF <> Windows.HFILE_ERROR then
try //偏移位置
FrameCount := ReadCount(HF, CountOffset);
FrameWidth := ReadCount(HF, WidthOffset);
FrameHeight := ReadCount(HF, HeightOffset);
finally
Windows.CloseHandle(HF);
end;
end;
====>>>>顺序读取可以,但我想实现高低换位
-------高低换位是什么意思??
===》》还有读取的数据不一定是2位的,可能只有1位(例如:02),也有可能是多位(例如:38C101)

数据类型如Integer的大小是4位,这与数值的位数无关系,你读取数值如
var
Result :Integer;
Num: Integer;
readFile(HF, Result, SizeOf(Integer), Num, nil);
这与数值的位数无关系,是不是这样的。

8楼: 0080d423h: 00 96 4E 00 ; .朜.
这样应该能直观一点
我想使用blockread读取EXE文件里这个位置的数值

9楼: 用类型指针啊

10楼: 这是读取一个地址的数据
if ReadProcessMemory(PParameter.processhandle,
pointer(Addr), 地址


pointer(@(buffer[1])), 保存数据的内存块
PParameter.DataType,Lpdw) then
begin
Case PParameter.DataType of
1:
begin
if PByte(@(Buffer))^=PParameter.Data then
begin
PSearchResult.Data:=PParameter.Data;
PSearchResult.DataAddr:=Addr;
PSearchResult.DataType:=PParameter.DataType;
Inc(AddrCount);
SendMessage(APPHandle,WM_READMEMORY,RM_GETADDR,RM_GETADDR);
end;
end;
2:
begin
if PWord(@(Buffer))^=PParameter.Data then
begin
PSearchResult.Data:=PParameter.Data;
PSearchResult.DataAddr:=Addr;
PSearchResult.DataType:=PParameter.DataType;
Inc(AddrCount);
SendMessage(APPHandle,WM_READMEMORY,RM_GETADDR,RM_GETADDR);
end;
end;
4:
begin
if PLongword(@(Buffer))^=PParameter.Data then

begin
PSearchResult.Data:=PParameter.Data;
PSearchResult.DataAddr:=Addr;
PSearchResult.DataType:=PParameter.DataType;
Inc(AddrCount);
SendMessage(APPHandle,WM_READMEMORY,RM_GETADDR,RM_GETADDR);
end;
end;
end;
end;

11楼: sbzldlb看上去是读内存的,我想要读取exe文件内容的

12楼: 还是先了解EXE文件的存储结构吧,在PE头里面找你想要的东西对应的偏移量 如服装销售管理软件