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

22.09.2007, 23:42
|
|
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..
|
|
|

23.09.2007, 00:09
|
|
Постоянный
Регистрация: 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;
}
|
|
|

23.09.2007, 12:29
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
2KEZ ну вот с нью и делитом все не так хорошо тк их основное достоинство в том, что они помимо выделения\освобождения памяти вызывают конструктор\деструктор к применяемым обьектов.
зы все операции к отдельным байтам памяти лучше конечно заменять обращениями по dword если это позволяется.
|
|
|

23.09.2007, 14:25
|
|
Участник форума
Регистрация: 04.03.2007
Сообщений: 143
Провел на форуме: 1386939
Репутация:
69
|
|
Выскакивает ошибка при компиляции: (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)
Кто может помочь?
|
|
|

23.09.2007, 14:32
|
|
Banned
Регистрация: 03.08.2007
Сообщений: 313
Провел на форуме: 951141
Репутация:
291
|
|
StatusOnTaskBar нужно указать прототип перед ее использованием
скорее всего у тебя два цикла и ты два раза написал int i...
так как кода ты не привел это всего лишь догадки.
|
|
|

23.09.2007, 15:29
|
|
Отец порядка
Регистрация: 04.03.2005
Сообщений: 1,007
Провел на форуме: 1204641
Репутация:
412
|
|
Народ! Спрашиваю еще раз ибо надо...
как при помощи указателей можно составить список целых чисел(вводится с клавиатуры) и потом посчитать сколько в нем содержится максимальных элементов. То есть найти самый большой и посчитать сколько таких в этом списке...
Если можно - то напишите сразу код плз. А то я с указателями вообще на "вы"... а задачу надо сдать =\
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..
|
|
|

23.09.2007, 15:37
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
Реализация линейного списка на С, с остальными задачами думаю сам справишься.
http://slil.ru/24889243
|
|
|

23.09.2007, 15:50
|
|
Отец порядка
Регистрация: 04.03.2005
Сообщений: 1,007
Провел на форуме: 1204641
Репутация:
412
|
|
Спасибо... но мне надо все это написать при помощи обычных модулей... то есть не насилуя так сильно мозг...
|
|
|

27.09.2007, 23:46
|
|
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме: 5128756
Репутация:
2032
|
|
1) как обнулить массив типа char или char *?
2) как перевести из char * массива (массив вида x[0]='0', x[1]='1', x[2]='2', x[n]='n'... итд) в тип unsigned long (чтобы было x = 0123, кстати, как убрать 0?)
|
|
|

27.09.2007, 23:56
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
1) ZeroMemory()
2) что-то вроде crt функции atol() вроде.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|