ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

21.10.2007, 23:07
|
|
Познающий
Регистрация: 30.11.2006
Сообщений: 49
Провел на форуме: 36434
Репутация:
28
|
|
Возникла у меня такая идейка. Функции в Си могут возвращать значение в регистрах eax, edx. Иными словами можно заставить функцию возвратить 2 значения вместо того, чтобы не передавать лишний укказатель указатель. Может быть это не совсем корректно, зато иногда бывает удобно.
насколько я разобрался - здесь можно поступить двумя способами:
LARGE_INTEGER function xx()
{
}
void main()
{
LARGE_INTEGER a;
a = xx();
a.HigthPart ..
a.LowPart
}
или непосредственно к регистрам
void main()
{
int a,b;
xx();
__asm{mov b,edx}
__asm{mov a,eax}
}
P.S. для более удобново вызова можно попробовать переопределить операторы...
|
|
|

29.10.2007, 20:04
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Генерации кодов Грея. Пишу для тех, кто знает о чем я. Короче, как вы помните, чувак предложил рекурсивный алгоритм и все такое. Я чуть не попутал, когда убедился, что ту же самую последовательность можно сгенерировать практически одной строкой:
Код:
for i := 0 to N-1 do
writeln(i xor (i div 2));
Какая нах рекурсия!!!
Пример использования. Генерация всех подмножеств множества:
Код:
{$apptype console}
var
U: array[0..3] of byte = (1, 2, 3, 4);
i,k: integer;
function checkbit(d, i: integer): boolean;
begin
if (d and (1 shl i)) = 0 then
result := false
else
result := true;
end;
begin
writeln('Dano: { 1 2 3 4 }'#13#10);
for i := 0 to 16 - 1 {16 - 2^N, N=4 - мощность множества} do
begin
write('{ ');
for k := 4-1 {N-1} downto 0 do
if checkbit((i xor (i div 2)), k) then
write(U[4-1 {N-1} -k],' ');
writeln('}');
end;
readln;
end.
Также хочу показать простой способ построения таблиц истиности логических выражений. Допустим, нужно построить:
Код:
X or (Y and Z)
| X | Y | Z | Y and Z | X or (Y and Z) |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Вот так это делается быстро и красиво:
Код:
{$apptype console}
type
myBool = 0..1;
var
X,Y,Z: myBool;
i: integer;
function checkbit(d, i: integer): myBool;
begin
if (d and (1 shl i)) = 0 then
result := 0
else
result := 1;
end;
begin
writeln('X or (Y and Z)');
writeln('| X | Y | Z | Y and Z | X or (Y and Z) |');
for i := 0 to 7 do
begin
X := checkbit(i,2);
Y := checkbit(i,1);
Z := checkbit(i,0);
write('| ',X,' | ',Y,' | ',Z,' | ',Y and Z,' | ',X or (Y and Z),' |');
writeln;
end;
readln;
end.
|
|
|

02.11.2007, 00:35
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Вот только недавно сталкнулся с одной проблемой в сетевом программировании.
Навреное и другие тоже сталкивались с этим.
А именно: когда стоит на компе Kaspersky Antivirus ( на 6 версии - 100%) то
любой connect будет удачным. В том смысле:
при коннекте к любому компу на заведомо закрытый порт - коннект пройдет удачно, в следствии того, что каспер подменяет IP и порт на localhost:1110 - какбы на свой прокси, с целью проверки трафика и именно по этой причине все коннекты являются удачными. Следовательно необходимо заботится о том, чтобы какимнить обрабом проверять естьли коннект реально или нет!
|
|
|

02.11.2007, 00:53
|
|
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме: 165671
Репутация:
215
|
|
Сообщение от gevara
Возникла у меня такая идейка.
Ну и извращение! Си позволяет возвращать не только простые, но и сложные типы данных, например структуры, только зачем это нужно, мне например вообще почти никогда не бывает нужно. В С++ - да. При перегрузке операций для классов там без этого не обойтись, а в си...
__asm{mov b,edx} вот это вообще издевателсьво. Остерегайтесь ассемблерных вставок в windows программах пользователського режима - они там ненужны, кроме того такой С-код непереносим. В gcc специально сделали синтаксис АТ&Т, чтобы неповадно было ассемблер использовать 
|
|
|

02.11.2007, 00:56
|
|
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме: 165671
Репутация:
215
|
|
Сообщение от slesh
чтобы какимнить обрабом проверять естьли коннект реально или нет!
С такой проблемой не сталкивался, но выход напрашивается, если ты используешь sockets api, проверяй после установки соединения, с кем реально ты соединился (если не sockets api, то наверняка тоже можно)
|
|
|

02.11.2007, 01:17
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 DWORD
В том то и дело, что по всем параметрам соединение идет какбы нормальное. потмоу что всё подменяется довольно четко. А писать громозкий код для определения сетевой активности своей проги - тоже както не хочется.
Если сам разрабатываешь и серверную и клиентскую часть, то выход прост. А если к примеру делается клиент к уже существующему серверу и идет жесткая организация пакетов типа по RFC то тогда возникает проблема. К примеру у меня тесты показали, что даже даже первые данных посланные через send удачно посылаются, даже если сервер недоступен. Просто данные шлются касперу, а от него теряются. Хотя повторная отправка пакета - уже выдает ошибку отправки, при отключеном сервере.
|
|
|

02.11.2007, 02:41
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
2slesh очень странно, в принципе, чисто теоретически, подобный перехват со стороны касперского должен официально подделывать возвращаемые ip-пакеты (адрес отправителя) иначе бы возникли проблемы с работой многих сетевых приложений. насчет connect'а: я так понимаю, что касперский должен выполнять функцию шлюза локальной сети, однако если тут этого не происходит, то видимо он вообще работает с пакетами на высоком уровне))
если так, то лучше избавиться от подобного ПО 
при определенных навыках можешь поработать с сырыми пакетами и посмотреть кто-что посылает. по-хорошему касперский должен быть ТОЧНО ip-прокси.
|
|
|

02.11.2007, 06:46
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
Касперский не перестаёт нас удивлять. А что же дальше? Инжект во все процессы, с целью посмотреть, что они будут делать? Заражение .ехе файлов на диске с целью закрепить свою защиту в системе?
|
|
|

02.11.2007, 10:00
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Остерегайтесь ассемблерных вставок в windows программах пользователського режима - они там ненужны, кроме того такой С-код непереносим. В gcc специально сделали синтаксис АТ&Т, чтобы неповадно было ассемблер использовать
Бред. Что куда неперносимо? В пределах разных Windows? С какой радости. Между платформами? Дык виндоус-код и так непереносим в этом смысле..
Так что уточни, что ты имел в виду.
|
|
|

02.11.2007, 11:15
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
>>Бред. Что куда неперносимо?
>>программах пользователського режима - они там ненужны, кроме того такой С-код непереносим
с опущенным словом windows очень даже правильно  про пользовательский режим - ну в общем-то правда, хотя наверняка найдутся примеры чья оптимизированная реализации на ассемблере будет нужна по части глупости компилятора. а C-код и правда не переносим будет, ведь асм-вставки это не стандарт языка.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|