Спасибо за помощь, в особенности DPP. А насколько я знаю и умею в DOS peek() читает читает определенную ячейку памяти в каком-то сегменте. Мне проще было пользоваться peek(), чем указателями (в которых я плохо разбираюсь), а с peek() все просто:
int a = peek(сегмент, смещение);
и в а содержимое ячейки .
->beginners07.05.04 10:25 Автор: amirul <Serge> Статус: The Elderman
> Мне проще было пользоваться peek(), > чем указателями (в которых я плохо разбираюсь), а с peek() > все просто: > > int a = peek(сегмент, смещение); > > и в а содержимое ячейки .
Осталось в плоской модели памяти определить только требуемые сегмент и смещение.
Я именно хочу прочитать ячейку в 'C++Builder 5'.
07.05.04 02:18 Автор: kisoff Статус: Незарегистрированный пользователь
> > Мне проще было пользоваться peek(), > > чем указателями (в которых я плохо разбираюсь), а с > peek() > > все просто: > > > > int a = peek(сегмент, смещение); > > > > и в а содержимое ячейки . > > Осталось в плоской модели памяти определить только > требуемые сегмент и смещение. Я именно хочу прочитать ячейку в 'C++Builder 5'.
Попробовал через указатели и __asm{} читать ячейку, компиляцию проходит,
а при Runing'e дойдя до инструкции чтения ячейки пишет:
"Access violation at address 004016DB in module 'SomeProject.exe'.
Read of address 00000411."
Здесь 004016DB без понятия чей адрес (вероятно какой-то Win'довский),
SomeProject - это мой файл, а 00000411 - ячейка которую я читаю.
Можно ли с этим как-то борться или с Win'дами бороться бесполезно?! ;)
А зачем это все надо?07.05.04 10:18 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 07.05.04 10:19 Количество правок: 1
> Я именно хочу прочитать ячейку в 'C++Builder 5'.
Метод работы с памятью не зависит ни от того Билдер ли это или нет, а от версии тем более.
Максимум что может быть - это не будет каких-либо библиотечных функций. Значит они либо не нужны, либо теряют смысл под этой операционной системой.
> Попробовал через указатели и __asm{} читать ячейку, > компиляцию проходит, > а при Runing'e дойдя до инструкции чтения ячейки пишет: > > "Access violation at address 004016DB in module > 'SomeProject.exe'. > Read of address 00000411." > > Здесь 004016DB без понятия чей адрес (вероятно какой-то > Win'довский),
Адрес кода того места программы, в котором происходит РанТайм ошибка.
> SomeProject - это мой файл, а 00000411 - ячейка которую я > читаю. > > Можно ли с этим как-то борться или с Win'дами бороться > бесполезно?! ;)
Что хочется-то, зачем нужны данные этой ячейки памяти?
ПС: А плоская от страничной модели памяти ничем не отличается с точки зрения пользовательской программы.
А про сегменты надо все-равно забыть.
Я именно хочу прочитать ячейку в 'C++Builder 5'.07.05.04 05:58 Автор: void <Grebnev Valery> Статус: Elderman
Оставь эту идею, со смещением и адресом сегмента. Это уже не нужно.
Я именно хочу прочитать ячейку в 'C++Builder 5'.07.05.04 02:55 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 07.05.04 06:17 Количество правок: 1
Помимо того что написал dl могу тока еще сказать такую штуку что в win32 environment у каждого процесса свое адресное пространство. Так что если ты перепишешь какой нить байт в своем процессе по какому нить адресу в другом процессе байт который находиться по тому же самому адресу не поменяеться. Да и до привычных по ДОСу адресов памяти устройств ты не достучишься из User-mode. В адресном пространстве твоего процесса их попросту нет.
ЗЫ а ветки прибиваються путем открытия своего сообщения и нажатия линка <удалить>. Еще там же ветку мона закрыть. И вообще ртфм описание форума).
без шансов07.05.04 02:34 Автор: dl <Dmitry Leonov> Отредактировано 07.05.04 02:36 Количество правок: 1
> "Access violation at address 004016DB in module > 'SomeProject.exe'. > Read of address 00000411." > Здесь 004016DB без понятия чей адрес (вероятно какой-то > Win'довский), > SomeProject - это мой файл, а 00000411 - ячейка которую я > читаю. > Можно ли с этим как-то борться или с Win'дами бороться > бесполезно?! ;)
Стоит сначала почитать про организацию памяти в Win32. Вообще-то младшие 4к в Win'9x (т.е. вплоть до FFF) и младшие 64к в NT (до FFFF) предназначены для выявления нулевых указателей и в принципе недоступны ни для записи, ни для чтения.
Совершенно верно! Сегмент и смещение у меня есть.07.05.04 02:12 Автор: kisoff Статус: Незарегистрированный пользователь
> > Мне проще было пользоваться peek(), > > чем указателями (в которых я плохо разбираюсь), а с > peek() > > все просто: > > > > int a = peek(сегмент, смещение); > > > > и в а содержимое ячейки . > > Осталось в плоской модели памяти определить только > требуемые сегмент и смещение. Совершенно верно! Сегмент и смещение у меня есть.
Совершенно верно! Сегмент и смещение у меня есть.07.05.04 07:07 Автор: void <Grebnev Valery> Статус: Elderman
> > Осталось в плоской модели памяти определить только > > требуемые сегмент и смещение. > Совершенно верно! Сегмент и смещение у меня есть.
Вот настырный.
Парни ж говорят, что нет. Модель памяти плоская , понимаешь. И память процесов изолирована друг от друга. Именно для того, чтоб кто-нить не сделал peek() другому процессу ;)))
ну а зачем для спасиба новую ветку создавать то?06.05.04 23:11 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 06.05.04 23:13 Количество правок: 1
> Спасибо за помощь, в особенности DPP. А насколько я знаю и > умею в DOS peek() читает читает определенную ячейку памяти > в каком-то сегменте. Мне проще было пользоваться peek(), > чем указателями (в которых я плохо разбираюсь), а с peek() > все просто: > > int a = peek(сегмент, смещение); > > и в а содержимое ячейки . В win32 environment нету никаких сегментов. И далеко не по любому адресу можно читать память.
ЗЫ а ветку эту сетаки прибей.
Как прибить ветку, я же не Killer?07.05.04 02:10 Автор: kisoff Статус: Незарегистрированный пользователь
> > Спасибо за помощь, в особенности DPP. А насколько я > знаю и > > умею в DOS peek() читает читает определенную ячейку > памяти > > в каком-то сегменте. Мне проще было пользоваться > peek(), > > чем указателями (в которых я плохо разбираюсь), а с > peek() > > все просто: > > > > int a = peek(сегмент, смещение); > > > > и в а содержимое ячейки . > В win32 environment нету никаких сегментов. И далеко не по > любому адресу можно читать память. > ЗЫ а ветку эту сетаки прибей. Я не умею пибивать ветки.