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

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

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

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

Репутация: 2726


По умолчанию

Цитата:
значит можно сделать вывод, что в моей проге есть какие-то функции, которые требуют CRT, но если ее добавть размер охрененно возрастет. получается, надо обрезать эти функции. так?
Угу, если бы у всех CRT-символов были аналоги в API windows, то нафига бы она была нужна. Не надо проводить четкую аналогию между CRT и API, её нет. То, что у strlen() есть аналог lstrlen() в kernel32.dll считайте чистой случайностью.

Вообще посмотри экспорт ntdll - найдешь очень много ф-ий типа strstr().
Ну можно вручную переписать много чего.
Я конечно хотел понтануться и кинуть листинг на осенблере всех этих ф-ий, но потом подумал что заебался понтоваться. Я и так крутой ИМХО.
Код:
bool lstrncmp( char *s1, char *s2, size_t iMaxLen ) {
	for (size_t i = 0; i < iMaxLen; i++) {
		if (!s1[i] || !s2[i]) return true;
		if (s1[i] != s2[i]) return true;
	}
	return false;
}

void lmemset( void *dst, char v, size_t s ) {
	for (size_t i = 0; i < s; i++) {
		((char*)dst)[i] = v;
	}
}

void lmemcpy( void *dst, void *src, size_t s ) {
	for (size_t i = 0; i < s; i++) {
		((char*)dst)[i] = ((char*)src)[i];
	}
}

bool lmemcmp( void *p1, void *p2, size_t s ) {
	for (size_t i = 0; i < s; i++) {
		if (((char*)p1)[i] != ((char*)p2)[i]) return true;
	}
	return false;
}

void *lmalloc( size_t s ) {
	return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, s );
}

void lfree( void *p ) {
	HeapFree( GetProcessHeap(), 0, p );
}

void* __cdecl operator new( size_t s ) {
	return lmalloc( s );
}

void __cdecl operator delete( void *p ) {
	lfree( p );
}

Последний раз редактировалось KEZ; 22.09.2007 в 23:52..
 

  #322  
Старый 23.09.2007, 00:09
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

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

Кез, прекратите понтоваться, пришло время нового поколения. У них есть пинч, а у вас знания по какимто С и онсемблеру, фуу.. не модно.
Я конечно тоже решил понтонуться и заделал аналог strlen() на ассемблере. Кстати, большинство функций crt переводятся на ассемблер за пару минут, при определенном знании конечно.
Код:
unsigned int _strlen(char *str)
{
unsigned int len = 0;
__asm
{
xor eax, eax
mov edi, str
or ecx, 0xffffffff
repne scasb
not ecx
dec ecx
mov len, ecx
}
return len;
}
И даже пример использования!
Код:
#include <stdio.h>
#include <stdlib.h>

unsigned int _strlen(char *str)
{
	unsigned int len = 0;
__asm
{
xor eax, eax
mov edi, str
or ecx, 0xffffffff
repne scasb
not ecx
dec ecx
mov len, ecx
}
return len;
}

int main(int argc, char *argv[])
{
  unsigned int ls = _strlen("WJWIdske83");
  printf("%d\n", ls);
  system("PAUSE");	
  return 0;
}
 

  #323  
Старый 23.09.2007, 12:29
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

2KEZ ну вот с нью и делитом все не так хорошо тк их основное достоинство в том, что они помимо выделения\освобождения памяти вызывают конструктор\деструктор к применяемым обьектов.

зы все операции к отдельным байтам памяти лучше конечно заменять обращениями по dword если это позволяется.
 

  #324  
Старый 23.09.2007, 14:25
-Time-
Участник форума
Регистрация: 04.03.2007
Сообщений: 143
Провел на форуме:
1386939

Репутация: 69
Отправить сообщение для -Time- с помощью ICQ
По умолчанию

Выскакивает ошибка при компиляции: (Visual C++ 6.0)
Код:
--------------------Configuration: Unit1 - Win32 Debug--------------------
Compiling...
Unit1.cpp
C:\Documents and Settings\*******************\exe\Unit1.cpp(110) : error C2065: 'StatusOnTaskBar' : undeclared identifier
C:\Documents and Settings\*******************\exe\Unit1.cpp(243) : error C2374: 'i' : redefinition; multiple initialization
        C:\Documents and Settings\*******************\exe\2\Unit1.cpp(161) : see declaration of 'i'
Error executing cl.exe.

Unit1.exe - 2 error(s), 0 warning(s)
Кто может помочь?
 

  #325  
Старый 23.09.2007, 14:32
inv
Banned
Регистрация: 03.08.2007
Сообщений: 313
Провел на форуме:
951141

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

StatusOnTaskBar нужно указать прототип перед ее использованием
скорее всего у тебя два цикла и ты два раза написал int i...
так как кода ты не привел это всего лишь догадки.
 

  #326  
Старый 23.09.2007, 15:29
DRON-ANARCHY
Отец порядка
Регистрация: 04.03.2005
Сообщений: 1,007
Провел на форуме:
1204641

Репутация: 412


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

Народ! Спрашиваю еще раз ибо надо...
как при помощи указателей можно составить список целых чисел(вводится с клавиатуры) и потом посчитать сколько в нем содержится максимальных элементов. То есть найти самый большой и посчитать сколько таких в этом списке...
Если можно - то напишите сразу код плз. А то я с указателями вообще на "вы"... а задачу надо сдать =\
PS: у меня борландовский цпп... так что модуля algorithm там нет) вобщем на циклах писать или как-то так... спасибо заранее

СПАСИБО. ПРОБЛЕМУ УЖЕ РЕШИЛ
если кому интересно, то вот решение... может пригодится...
Код:
 #include <stdio.h>
 
struct tlist
{
  long value;
  tlist *next;
};
 
void main(void)
{
  tlist *list=NULL,*t=NULL,*t2;
  int a;
  puts("Enter numbers; enter non-number value to finish");
  while(scanf("%d",&a)==1)
  {
    t2=t;
    t=new tlist;
    t->next=NULL;
    t->value=a;
    if(!list)list=t;
    else t2->next=t;
  }
  int cnt=0;
  t=list;
  while(t)
  {
    if(!cnt||a<t->value)
    {
      cnt=1;
      a=t->value;
    }
    else
      if(a==t->value)cnt++;
    t=t->next;
  }
  printf("Maximum %d, %d times\n",a,cnt);
}

Последний раз редактировалось DRON-ANARCHY; 27.09.2007 в 22:07..
 

  #327  
Старый 23.09.2007, 15:37
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

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

Реализация линейного списка на С, с остальными задачами думаю сам справишься.
http://slil.ru/24889243
 

  #328  
Старый 23.09.2007, 15:50
DRON-ANARCHY
Отец порядка
Регистрация: 04.03.2005
Сообщений: 1,007
Провел на форуме:
1204641

Репутация: 412


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

Спасибо... но мне надо все это написать при помощи обычных модулей... то есть не насилуя так сильно мозг...
 

  #329  
Старый 27.09.2007, 23:46
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


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

1) как обнулить массив типа char или char *?
2) как перевести из char * массива (массив вида x[0]='0', x[1]='1', x[2]='2', x[n]='n'... итд) в тип unsigned long (чтобы было x = 0123, кстати, как убрать 0?)
 

  #330  
Старый 27.09.2007, 23:56
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

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

1) ZeroMemory()
2) что-то вроде crt функции atol() вроде.
 
 





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


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




ANTICHAT.XYZ