- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
int main(int argc, char *argv[])
{
int i = 0;
char stuffing[36];
for (i = 0; i <= 32; i += 4)
*(long *) &stuffing = 0x8048374 ;
puts(stuffing);
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 5
−42
int main(int argc, char *argv[])
{
int i = 0;
char stuffing[36];
for (i = 0; i <= 32; i += 4)
*(long *) &stuffing = 0x8048374 ;
puts(stuffing);
return 0;
}
Имея какую-либо прогу с принтфами и сканфами. имея уязвимости этих функций, мы с помощью программы, скомпилированной с этим кодом, произведем атаку на адрес 0x8048374. по этому адресу в программе - оппоненте находится точка входа в функцию, где происходит ввод строки(scanf'ом). введя строку, программа-атакер не даст выйти из функции и снова ударит по адресу входа и так далее....зацикливание.
Это лаба по анализу уязвимостей по. вот не пойму только - 8 раз пройдет цикл, и по идее должен завершиться код, но помню когда делал лабу - сканф вызывался бесконечно при атаке. еще ужасная 7я строка создает жуткое впечатление ничегонепонимания )
−45
#include <iostream>
#include <conio.h>
using namespace std;
void iswap(int &n1, int &n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
int main()
{
int const n = 100;
int a[n];
for ( int i = 0; i < n; ++i ) { a[i] = n - i; cout << a[i] << " "; }
//заполняем массив для наглядности.
//-----------сортировка------------//
//сортирует по-возрастанию. чтобы настроить по-убыванию,
//поменяйте знаки сравнения в строчках, помеченных /*(знак)*/
int sh = 0; //смещение
bool b = false;
for(;;)
{
b = false;
for ( int i = 0; i < n; i++ )
{
if( i * 2 + 2 + sh < n )
{
if( ( a[i + sh] > /*<*/ a[i * 2 + 1 + sh] ) || ( a[i + sh] > /*<*/ a[i * 2 + 2 + sh] ) )
{
if ( a[i * 2 + 1 + sh] < /*>*/ a[i * 2 + 2 + sh] )
{
iswap( a[i + sh], a[i * 2 + 1 + sh] );
b = true;
}
else if ( a[i * 2 + 2 + sh] < /*>*/ a[ i * 2 + 1 + sh])
{
iswap( a[ i + sh], a[i * 2 + 2 + sh]);
b = true;
}
}
}
else if( i * 2 + 1 + sh < n )
{
if( a[i + sh] > /*<*/ a[ i * 2 + 1 + sh] )
{
iswap( a[i + sh], a[i * 2 + 1 + sh] );
b = true;
}
}
}
if (!b) sh++; //смещение увеличивается, когда на текущем этапе
//сортировать больше нечего
if ( sh + 2 == n ) break;
} //конец сортировки
cout << endl << endl;
for ( int i = 0; i < n; ++i ) cout << a[i] << " ";
_getch();
return 0;
}
Запостил как-то на вики как более короткая реализация с++, более понятная и главное - рабочая. Не признали. Сам смотрю - не понимаю че там написано )))
+997
void TexQ::Move()
{
mx = quad.v[0].x;
my = quad.v[0].y;
if(hge->Input_GetKeyState(HGEK_RBUTTON) || hge->Input_KeyDown(HGEK_LBUTTON))
{
hge->Input_GetMousePos(&nx, &ny);
move = true;
sx = GetPositionX();
sy = GetPositionY();
subx = nx - sx;
suby = ny - sy;
if ( abs(subx) > abs(suby) )
{
iter = abs(subx);
ms = subx;
subx = (subx < 0) ? -1.0f : 1.0f;
suby = (suby < 0 ) ? suby/abs(ms) : abs(suby/ms);
}
else
{
iter = abs(suby);
ms = suby;
suby = (suby < 0) ? -1.0f : 1.0f;
subx = (subx < 0 ) ? subx/abs(ms) : abs(subx/ms);
}
}
if (move)
{
if (iter >= shift)
{
iter-=shift;
this->SetPosition(
GetPositionX() + subx * shift,
GetPositionY() + suby * shift);
}
else
{
this->SetPosition(nx , ny);
move = false;
}
}
}
Хреновый из меня математик. Этот метод втыкается в функцию фрейминга. И текстура едет по прямой туда, куда мышью тыкнешь.
Позже узнал, как можно тригонометрией в 5 строк написать такую же )
+153
dData->RowCount++;
for (int i = 0; i < dData->RowCount - 1; i++)
for (int j = 0; j < dData->ColumnCount; j++)
dData->Rows[i]->Cells[j]->Value = dData->Rows[i + 1]->Cells[j]->Value;
Мучил седня DataGridView, при dData->RowCount++ создавалась новая строчка в таблице, но только сверху. Остальное съезжало вниз на 1 ячейку. Я боролся полчаса с этим, пока не объяснил проблему товарищу. он предложил свой вариант всего кода:
dData->Rows->Add();
:DDDD
+66
//Функция перевода с std::string в System::String; .netFramework 3.5
String^ stringToString(string str)
{
TextBox^ strS=gcnew TextBox;
strS->Clear();
string cmps="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";
TextBox^ cmpS=gcnew TextBox;
cmpS->Text="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";
for(int i=0;i<str.size();i++)
{
for(int j=0;j<cmps.size();j++)
{
if(str[i]==cmps[j])strS->Text=strS->Text+cmpS->Text->Substring(j,1);
}
}
return strS->Text;
}
он работает :)))