информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаSpanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Глупые вопросы часть 3 :) 03.11.02 20:38  Число просмотров: 1082
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
а ты включи Disassembly - и потрассируй
может поможет =
<programming>
Глупые вопросы часть 3 :) 30.10.02 19:13  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
#include <stdio.h>
typedef void (*PROC)();

void main()
{
	printf( "a" );
	PROC p1;
	p1 = (PROC)main;
//	p1 = (PROC)0x401020;
	p1();
}

---

на строчку p1 = (PROC)main; ставим точку останова. идем в дебагере. видим что main = 0x401020, а p1 (после присваивания) 0x40100a. Во как !
И это не понятно.
Но чудеса продолжаются: раскоментариваем строку p1 = (PROC)0x401020; и видим что программка все равно работает. ей пофиг чему будет равняться p1: 0x40100a или 0x401020 - чудеса...
Глупые вопросы часть 3 :) 05.11.02 13:12  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А ты в какой среде работал? Я например твой пример в Borland Builder посмотрел - там все корректно...
Глупые вопросы часть 3 :) 03.11.02 20:38  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
а ты включи Disassembly - и потрассируй
может поможет =
Глупые вопросы часть 3 :) 01.11.02 10:36  
Автор: Ultra Статус: Незарегистрированный пользователь
<"чистая" ссылка>
>
> #include <stdio.h>
> typedef void (*PROC)();
> 
> void main()
> {
> 	printf( "a" );
> 	PROC p1;
> 	p1 = (PROC)main;
> //	p1 = (PROC)0x401020;
> 	p1();
> }
> 

---
>
> на строчку p1 = (PROC)main; ставим точку останова. идем в
> дебагере. видим что main = 0x401020, а p1 (после
> присваивания) 0x40100a. Во как !
> И это не понятно.
> Но чудеса продолжаются: раскоментариваем строку p1 =
> (PROC)0x401020; и видим что программка все равно работает.
> ей пофиг чему будет равняться p1: 0x40100a или 0x401020 -
> чудеса...
Зря ты так над С эксперементируешь, это тебе не асм, тут все намного сложнее, ведь это алгоритмический язык программирования.
А на счет твоей проги, я немного не понял, инфы мало. Если ты компилишь прогу под виньдовз, то почитай exe`шный фал в Hex`e и все поймешь. Просто виндовские проги начинают работать где-то с середины кода....
Я тоже сталкивался с такой проблеммой, и мне объяснили ее так.
там просто jmp стоит 30.10.02 19:34  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
А как объяснить разные значения после операции = ? 30.10.02 19:38  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
значит дебагер и компилятор разные из двух значений используют 30.10.02 19:57  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
дебагер тебе показывает саму main
а компилер присваивает адрес jmp
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach