it-place.net > Уроци > C-Cplusplus
Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Obfuscation в C++
  1. Obfuscation в C++ - I
  2. Obfuscation в C++ - II
Black`n`White
     
Автор  Black`n`White (10.08.2007 21:48)  съобщение до автора
Погледнат  4594 пъти  добави към любими
Оценка  добави коментар
Гласове  1  изпрати на приятел
Коментари  (1)  абонирай се за C-Cplusplus
    Страница 1 / 2

 



В тази кратка статия ще разгледаме някои специални теми, свързани с указателите в C и C++ и методи за Code Obfuscation, директно свързани с тях (и не само :) )

Първо да разгледаме по-подробно декларацията на масиви.
За да декларираме обикновен едноизмерен такъв пишем:

CODE
1
int a[5];

Така вече имаме указател към първия елемент, а до останалите имаме достъп директно чрез този указател. Сега да инициализираме масива, като използваме тези указатели, а не []

CODE
1
2
3
4
5
for(int i = 0; i < 5; ++i)
{

    *
(a+i) = i*i; // все едно a[i] = i*i;
   
printf("%i\n",*(a+i)); // все едно printf("%i\n",a[i]);
}

Виждаме, че a[i] е същото като *(a+i), което е същото като *(i + a) от разместителното свойство, което по същата логика е еднакво с i[a]. Малко странно на пръв поглед, но наистина няма значение в C++ дали ще напишем ImeNaMasiva[index] или index[ImeNaMasica]

Ето и един тест, който потвърждава това:

CODE
1
2
3
4
5
6
int p[5];
for(int i = 0; i < 5; ++i)
{
   
p[i] = i;
   
cout << i[p] << endl; // все едно cout << p[i] << endl;
}



  Следваща страница >> 


Ключови думи: C++ obfuscation обфускация


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 За автора: Black`n`White  
I am experienced .NET Application Developer, and also I have worked a lot of time with Borland VCL. Right now I am working on several projects, based on the .NET Platform. Also I am student at the Technical University of Varna
   
 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Много добра статия. Автора единствено е пропуснал да говори за оператора запетая, а с него могат да се правят щуротии от вида на:

CODE
1
while (instr1, instr2, instr3, cond);

което е същото като

CODE
1
2
3
4
5
do {
 
instr1;
 
instr2;
 
instr3;
} while (cond);

или пък

CODE
1
2
3
4
5
if (instr1, instr2, instr3, cond) {
 
instr4;
 
instr5;
 
instr6;
}

което всъщност е

CODE
1
2
3
4
5
6
7
8
9
instr1;
instr2;
instr3;
 
if (cond) {
 
instr4;
 
instr5;
 
instr6;
}

Не правете това в час по информатика за да няма припаднали учителки

  blowfish на 13.08.2007 01:00

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008