Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
Я именно хочу прочитать ячейку в 'C++Builder 5'. 07.05.04 05:58 Число просмотров: 1520
Автор: void <Grebnev Valery> Статус: Elderman
|
Оставь эту идею, со смещением и адресом сегмента. Это уже не нужно.
|
<programming>
|
[C++] Спасибо за ответы 06.05.04 23:09 [amirul]
Автор: kisoff Статус: Незарегистрированный пользователь
|
Спасибо за помощь, в особенности DPP. А насколько я знаю и умею в DOS peek() читает читает определенную ячейку памяти в каком-то сегменте. Мне проще было пользоваться peek(), чем указателями (в которых я плохо разбираюсь), а с peek() все просто:
int a = peek(сегмент, смещение);
и в а содержимое ячейки .
|
|
->beginners 07.05.04 10:25
Автор: amirul <Serge> Статус: The Elderman
|
|
|
Осталось в плоской модели памяти определить только требуемые... 07.05.04 01:30
Автор: void <Grebnev Valery> Статус: 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 нету никаких сегментов. И далеко не по > любому адресу можно читать память. > ЗЫ а ветку эту сетаки прибей. Я не умею пибивать ветки.
|
|
|