![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Borland Delphi 6 + asm [D6, XP]
Windows © (2007-10-04 20:34:00)Здравствуйте. Никак не могу понять, как записать значение в память
mov ax, 0b800h
mov es, ax - вылетает... Хотя не должно.
так же
mov ax, 0b800h
mov bx, 10h
mov [ax], bx - вылетает.
Объясните пожалуйста, как нада правильно писать в память)
Германн (2007-10-06 00:33:00) [1]
> Dimaxx © (05.10.07 18:41) [32]
Имхо хочет изменить значения некоторых переменных в работающей программе. Только пока ещё не признался, что в чужой программе. Поэтому пока ещё и не знает какой облом его ждет на самом деле. :-)
Dimaxx (2007-10-05 18:41:00) [2]Я чет не пойму - зачем тебе вся эта байда?? Переменных мало? Массивов?
Windows (2007-10-05 17:23:00) [3][25] изменяет в самой программе?
Сергей М. (2007-10-05 17:15:00) [4]
> перед запускам программа ложится в Оперативную память и
> от туда исполняется
Неверно.
Программа ложится в виртуальнуюпамять, прямого доступа к оперативной (физической ) памяти программа не имеет.
> нужно найти данные из секции кода(@perem) и изменить
см. [25]
Германн (2007-10-05 17:13:00) [5]
> перед запускам программа ложится в Оперативную память и
> от туда исполняется
Твои познания соответствуют временам "Очакова и покоренья Крыма" (ДОСа то бишь).
Windows (2007-10-05 17:07:00) [6]Что-то я весь запутался... попробую еще раз, так как я понимаю, но чувствую, что я не правильно понимаю...
перед запускам программа ложится в Оперативную память и от туда исполняется... дак вот в ней нужно найти данные из секции кода(@perem) и изменить... т.е изменить программу только на время исполнения... Если не ошибаюсь некоторые переменные в том же паскале работают таким же способом-хранятся в памяти, а сами по себе являются ссылками на место в памяти.
А пункт 8 и 9. это конкретно про переменные паскаля.
> Мне непонятно, зачем это делать на asm, да еще и размещать
> при этом переменные в секции кода ?
> Чем не угодил Паскаль и секция данных ?
Смысла тут искать не нужно. Просто выбрал такой способ для небольшого познания асма...))
Сергей М. (2007-10-05 16:50:00) [7]
> мне нужно изменить это в Оперативной памяти
Ну и меняй себе на здоровье)
см. [8], [9]
Мне непонятно, зачем это делать на asm, да еще и размещать при этом переменные в секции кода ?
Чем не угодил Паскаль и секция данных ?
Windows (2007-10-05 16:44:00) [8]Мне не нужно изменять в самом исполняемом, мне нужно изменить это в Оперативной памяти, т.е что бы можно было считывать и изменять значение.
> Сергей М. © (05.10.07 12:48) [24]
> Сначала объясни, зачем тебе это потребовалось ?
собсно, мне это и не нужно.
Я наверное просто не правильно выражаюсь...
TSNamir@mail.ru (2007-10-05 13:00:00) [9]function Adr : PDWORD;
asm
jmp @@start
@@perem:
dw 2
@@start:
mov eax, offset @@perem
end;
procedure Do;
var FAdr : PDWORD;
procedure DoWrite(Addr : PDWORD);
asm
mov [eax], 25
end;
begin
FAdr:= Adr;
VirtualProtect(FAdr, SizeOf(DWORD), PAGE_READWRITE, @OldProtection);
DoWrite(FAdr);
VirtualProtect(FAdr, SizeOf(DWORD), OldProtection, @OldProtection);
end;
Сергей М. (2007-10-05 12:48:00) [10]Сначала объясни, зачемтебе это потребовалось ?
TSNamir@mail.ru (2007-10-05 12:41:00) [11]Для
Windows (2007-10-05 12:41:00) [12]
> Можно.
> Но зачем ?
Пожалуйста, если знаете, поделитесь информацией.
Сергей М. (2007-10-05 10:03:00) [13]
> данные по адресу @perem изменить нельзя?
Можно.
Но зачем?
palva (2007-10-04 22:15:00) [14]Windows © (04.10.07 22:03) [19]
Наверно, как-то можно исхитриться. Но для обычных пользователей OC не разрешает программе модифицировать свой код.
Windows (2007-10-04 22:03:00) [15]Дак я так понял, что конкретно в моем случаи данные по адресу @perem изменить нельзя?
palva (2007-10-04 22:02:00) [16]Anatoly Podgoretsky © (04.10.07 21:58) [17]
Ну это я потом сообразил, что ebp держит фрейм локальных переменных. Я хотел ему проиллюстрировать, что ebp именно такой регистр, который допускает квадратные скобки. Тем более, что код у меня сработал, как ни странно.
Anatoly Podgoretsky (2007-10-04 21:58:00) [17]> palva (04.10.2007 21:55:14) [14]
Ну такой, заведомо неверный код не стоило бы приводить, не красит, тем более, что знаешь как писать, а вот возьмет Виндоус и использует его?
Anatoly Podgoretsky (2007-10-04 21:57:00) [18]> Windows (04.10.2007 21:56:15) [15]
В справке написано, про ассемблерные вставки.
Windows (2007-10-04 21:56:00) [19]
> Anatoly Podgoretsky © (04.10.07 21:53) [13]
>
> > palva (04.10.2007 21:50:12) [12]
>
> Работает? Тогда ты в рубашке родился.
А нельзя тогда объяснить, почему вы так считаете?
palva (2007-10-04 21:55:00) [20]Anatoly Podgoretsky © (04.10.07 21:53) [13]
Ну конечно, надо бы ebx восстановить. Но такого вопроса в сабже не было.