void SendALL(DWORD IPos, DWORD IId)
{
BYTE buf[10] = {0};
memset(buf,0,10);
buf[0] = 0x23;
buf[3] = 0x10;
*(DWORD *)(buf+2) = IPos;
*(DWORD *)(buf+8) = IId;
} .........郁闷了很久的问题
{
BYTE buf[10] = {0};
memset(buf,0,10);
buf[0] = 0x23;
buf[3] = 0x10;
*(DWORD *)(buf+2) = IPos;
*(DWORD *)(buf+8) = IId;
} .........郁闷了很久的问题
procedure TForm1.SendAll(IPos:DWORD;IId:DWORD);
var
buf : array [0..9] of Byte;
begin
FillChar(buf,Length(buf),0);
buf[0] := $23;
buf[3] := $10;
buf[2] := IPos;
buf[8] := IId;
ShowMessage(IntToStr(buf[0]));
end;
void SendALL(DWORD IPos, DWORD IId)
{
BYTE buf[10] = {0};
memset(buf,0,10);
buf[0] = 0x23;
buf[3] = 0x10;
*(DWORD *)(buf+2) = IPos;
*(DWORD *)(buf+8) = IId;
}
假设两个参数都最大的DWORD, 0xffffffff 初始内存为 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
buf[0] = 0x23; 内存为 35, 0, 0, 0, 0, 0, 0, 0, 0, 0
buf[3] = 0x10; 内存为 35, 0, 0, 16, 0, 0, 0, 0, 0, 0
*(DWORD *)(buf+2) = IPos; 内存为 35, 0, 255, 255, 255, 255, 0, 0, 0, 0 改写掉 buf[3] = 0x10;的操作
*(DWORD *)(buf+8) 内存为 35, 0, 255, 255, 255, 255, 0, 0, 255, 255
另外还有两个越界非法操作