Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Borland Delphi 6 + asm [D6, XP]


Страницы:   1 2

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 восстановить. Но такого вопроса в сабже не было.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо