ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 21.10.2007, 23:07
gevara
Познающий
Регистрация: 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. для более удобново вызова можно попробовать переопределить операторы...
 
Ответить с цитированием

  #32  
Старый 29.10.2007, 20:04
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Генерации кодов Грея. Пишу для тех, кто знает о чем я. Короче, как вы помните, чувак предложил рекурсивный алгоритм и все такое. Я чуть не попутал, когда убедился, что ту же самую последовательность можно сгенерировать практически одной строкой:

Код:
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.
 
Ответить с цитированием

  #33  
Старый 02.11.2007, 00:35
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Вот только недавно сталкнулся с одной проблемой в сетевом программировании.
Навреное и другие тоже сталкивались с этим.
А именно: когда стоит на компе Kaspersky Antivirus ( на 6 версии - 100%) то
любой connect будет удачным. В том смысле:
при коннекте к любому компу на заведомо закрытый порт - коннект пройдет удачно, в следствии того, что каспер подменяет IP и порт на localhost:1110 - какбы на свой прокси, с целью проверки трафика и именно по этой причине все коннекты являются удачными. Следовательно необходимо заботится о том, чтобы какимнить обрабом проверять естьли коннект реально или нет!
 
Ответить с цитированием

  #34  
Старый 02.11.2007, 00:53
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
Сообщение от gevara  
Возникла у меня такая идейка.
Ну и извращение! Си позволяет возвращать не только простые, но и сложные типы данных, например структуры, только зачем это нужно, мне например вообще почти никогда не бывает нужно. В С++ - да. При перегрузке операций для классов там без этого не обойтись, а в си...

__asm{mov b,edx} вот это вообще издевателсьво. Остерегайтесь ассемблерных вставок в windows программах пользователського режима - они там ненужны, кроме того такой С-код непереносим. В gcc специально сделали синтаксис АТ&Т, чтобы неповадно было ассемблер использовать
 
Ответить с цитированием

  #35  
Старый 02.11.2007, 00:56
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
Сообщение от slesh  
чтобы какимнить обрабом проверять естьли коннект реально или нет!
С такой проблемой не сталкивался, но выход напрашивается, если ты используешь sockets api, проверяй после установки соединения, с кем реально ты соединился (если не sockets api, то наверняка тоже можно)
 
Ответить с цитированием

  #36  
Старый 02.11.2007, 01:17
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 DWORD
В том то и дело, что по всем параметрам соединение идет какбы нормальное. потмоу что всё подменяется довольно четко. А писать громозкий код для определения сетевой активности своей проги - тоже както не хочется.
Если сам разрабатываешь и серверную и клиентскую часть, то выход прост. А если к примеру делается клиент к уже существующему серверу и идет жесткая организация пакетов типа по RFC то тогда возникает проблема. К примеру у меня тесты показали, что даже даже первые данных посланные через send удачно посылаются, даже если сервер недоступен. Просто данные шлются касперу, а от него теряются. Хотя повторная отправка пакета - уже выдает ошибку отправки, при отключеном сервере.
 
Ответить с цитированием

  #37  
Старый 02.11.2007, 02:41
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

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

  #38  
Старый 02.11.2007, 06:46
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Касперский не перестаёт нас удивлять. А что же дальше? Инжект во все процессы, с целью посмотреть, что они будут делать? Заражение .ехе файлов на диске с целью закрепить свою защиту в системе?
 
Ответить с цитированием

  #39  
Старый 02.11.2007, 10:00
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Остерегайтесь ассемблерных вставок в windows программах пользователського режима - они там ненужны, кроме того такой С-код непереносим. В gcc специально сделали синтаксис АТ&Т, чтобы неповадно было ассемблер использовать
Бред. Что куда неперносимо? В пределах разных Windows? С какой радости. Между платформами? Дык виндоус-код и так непереносим в этом смысле..
Так что уточни, что ты имел в виду.
 
Ответить с цитированием

  #40  
Старый 02.11.2007, 11:15
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

>>Бред. Что куда неперносимо?

>>программах пользователського режима - они там ненужны, кроме того такой С-код непереносим

с опущенным словом windows очень даже правильно про пользовательский режим - ну в общем-то правда, хотя наверняка найдутся примеры чья оптимизированная реализации на ассемблере будет нужна по части глупости компилятора. а C-код и правда не переносим будет, ведь асм-вставки это не стандарт языка.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
10 tips & tricks for C/C++ windows programming with Visual C++ 6.0 Dracula4ever Forum for discussion of ANTICHAT 0 30.05.2006 17:11



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ