![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Циклы и рисование пикселей на форме . Помогите нормально написат [D7]
Dimka-super © (2014-06-08 23:40:00)В книге Криса Касперски есть на транице 48 формула.
ea = BASE * 0x10 + offset
Формула 2 Перевод сегментного адреса в линейный
Пытаюсь что то осмыслить.
Хотелось бы взять и отразить на канве скажем при линейном адресе ea равном ну хоть 1000 область результатов возможных значений BASE и offset.
Вижу на канве пунктирную линию.
А что если линейный адрес ea взять в некиз приделах ну хоть (100-10000) ???
Считаю область значений для каждого значения линейного адреса, и все эти пиксели остаются на канве.
Но что это? Вижеу так же редкий пунктир! Чего не закрашеную жирную область? Не говоря уже о том что вообще все криво но вообще жистокое ощущение что щитается не то что мне хотелось!! Посмотрите, я координатни оси в школе прогулял!
Видите, насколько же рагато все исполняется. Помогите!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
BASE,offset,ea : integer;
begin
//ea = BASE * 0x10 + offset
//Canvas.Pixels[10,20]:=clBlack;
BASE:=$0; offset:=$0;
ea:=$1000;
for ea:=$100 to $100000 do
begin
for BASE := $1 to $100000 do
begin
for offset := $1 to $100000 do
begin
if (ea = BASE * $10 + offset) then
Canvas.Pixels[BASE ,offset]:=clBlack;
end;
end;
end;
end;
end.
Dimka-super (2014-06-17 00:05:00) [1]СПАСИБО ОГРОМНОЕ!!!
megavoid (2014-06-09 14:22:00) [2]Сейчас другое адресное пространство, вот так можно пройтись по всем offset, код от того же КК, кстати:
procedure TForm1.Button1Click(Sender: TObject);
var p: UINT32;
begin
p := $00001000;
while (p > 0) do begin
if (not IsBadCodePtr(@p)) then
Memo1.Lines.add( format('page: %08xh', [p]) );
Inc(p, $1000);
end;
end;
Anatoly Podgoretsky (2014-06-09 13:11:00) [3]К тому же реалный режим не поддерживается компилятором
Dimka-super (2014-06-09 10:25:00) [4]Спасибо!!!
icWasya (2014-06-09 10:12:00) [5]Вё это было для Реального режима Intel 8086.
Начиная с Windows 95™, процессоры используют «плоскую» модель памяти, имеет смысл только offset