Сейчас на форуме: (+2 невидимых)

 eXeL@B —› Оффтоп —› C++
Посл.ответ Сообщение


Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 10 апреля 2008 06:28
· Личное сообщение · #1

Товарисчи пишущие на сях, сканпелируйте небольшой кусочег шеллкодеса.
Хочется посмотреть как оно работает

edc2_09.04.2008_CRACKLAB.rU.tgz - sh1.txt

-----
iNTERNATiONAL CoDE CReW





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 10 апреля 2008 08:51
· Личное сообщение · #2

int 3 добавил перед printf

6a78_09.04.2008_CRACKLAB.rU.tgz - sh1.exe

-----
invoke OpenFire





Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 10 апреля 2008 09:22
· Личное сообщение · #3

Спасибо айсенг

-----
iNTERNATiONAL CoDE CReW





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 января 2011 02:46
· Личное сообщение · #4

Помогите уйти от ошибки...
При линковке, получаю:
[Linker Error] Unresolved external 'initLex(char *)' referenced from .\UNIT1.OBJ
при чём initLex объявлена как int initLex(char* fname) в модуле Lex.c
Lex.h приинклюдил, почему он его не находит?
сырки в аттаче

f202_12.01.2011_CRACKLAB.rU.tgz - Compiler.rar

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 13 января 2011 08:53
· Личное сообщение · #5

imho, не находит из-за конвенций вызовов, по умолчанию в проектах си стоит __cdecl, попробуй поменять в свойствах проекта либо принудительно припиши к объявлению функции __stdcall (или что-нибудь другое)




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 января 2011 11:01
· Личное сообщение · #6

Av0id хмм... так я же не готовый OBJ линкую, а компилирую оба модуля и собираю в BCB т.ч. не думаю, что __stdcall нужен, или я не прав?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 января 2011 13:16
· Личное сообщение · #7

Isaev - про декорирование имён почитай.
У тебя initLex написана на Си - имя в объектнике будет "_initLex".
А вызываешь ты из С++ - там из-за декорирования имя будет "?initLex@@YAHPAD@Z".
Разницу видишь?
В Lex.h замени прототип на
Code:
  1. extern "C" int initLex(char* fname);





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 января 2011 14:59 · Поправил: Isaev
· Личное сообщение · #8

cppasm пишет:
Isaev - про декорирование имён почитай.

почитал --> тут <--

cppasm пишет:
В Lex.h замени прототип на

Не катит... [C++ Error] Lex.h(69): E2040 Declaration terminated incorrectly

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 января 2011 15:04 · Поправил: cppasm
· Личное сообщение · #9

Isaev не верю
Изменённый вариант выложи.
Студия компилирует если всякие BCB приколы повыбрасывать, BCB тоже должен.

// Добавлено

Не заметил что Lex.h и в *.с и в *.срр подключается.
Тогда надо так:

Code:
  1. #ifdef __cplusplus
  2. extern "C"
  3. {
  4. #endif
  5. int initLex(char* fname);
  6. #ifdef __cplusplus
  7. }
  8. #endif


Просто в Си нету extern "C".

Ну или так можно (удобнее если функций много):

Code:
  1. #ifdef __cplusplus
  2. #define extern_c extern "C"
  3. #else
  4. #define extern_c
  5. #endif
  6.  
  7. extern_c int initLex(char* fname);


| Сообщение посчитали полезным: Isaev


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 января 2011 15:12 · Поправил: Isaev
· Личное сообщение · #10

изменил только
Code:
  1. /**************** Funktionsdeklarationen ********************/
  2. //int initLex(char* fname); // Initialisierung der lexiaklischen Analyse
  3. extern "C" int initLex(char* fname); // Initialisierung der lexiaklischen Analyse

ошибка именно в этой строке

// добавлно:
да, спасибо, теперь всё летает

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 января 2011 18:17
· Личное сообщение · #11

[C++ Error] Parser.h(42): E2449 Size of 'gProg' is unknown or zero
Почему? Всю голову сломал

и ещё:
Code:
  1.   TCHAR curPath[MAX_PATH-2];
  2.   Files files;
  3.   int pos;
  4.   GetCurrentDirectory(sizeof(curPath),curPath);
  5.   pos=String(curPath).Length();
  6.   curPath[pos]='\';
  7.   curPath[pos+1]='P';
  8.   curPath[pos+2]='L';
  9.   curPath[pos+3]='0';
  10.   curPath[pos+4]='\0';
  11.   do; while (!getFilesData(curPath,files));

Вот это бредовое дополнение строки как сделать красивее?

b52b_28.01.2011_CRACKLAB.rU.tgz - Compiler.rar

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 28 января 2011 18:45 · Поправил: neomant
· Личное сообщение · #12

При объявлении массива не указан его размер. Полагаю, что имелось в виду что-то другое:
extern gProg[]?
Code:
  1. _tcscat_s(curPath, sizeof(curPath) / sizeof(TCHAR), "\\PL0");


-----
Следуй за белым кроликом


| Сообщение посчитали полезным: Isaev


Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 января 2011 18:58
· Личное сообщение · #13

strcat можно сделать для конкатенации строк. Нафига шаманства со String тоже непонятно, когда есть нормальные функции, в том числе и апи, типа strlen.
Что касается последнего оратора, делить на sizeof(TCHAR) хреново, лучше делить на размер нулевого элемента массива.

| Сообщение посчитали полезным: Isaev


Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 28 января 2011 20:06 · Поправил: neomant
· Личное сообщение · #14

Archer пишет:
Что касается последнего оратора, делить на sizeof(TCHAR) хреново

Согласен. Если сменится тип массива, нужно будет чистить такие хвосты и не факт, что все будут зачищены. Рассадник багов.

-----
Следуй за белым кроликом





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 января 2011 21:54
· Личное сообщение · #15

neomant пишет:
extern gProg[]?

точно, второй раз на те же грабли...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 28 января 2011 22:57
· Личное сообщение · #16

Isaev пишет:
точно, второй раз на те же грабли


На те-же, но не совсем. В первый раз через extern "C" - отказались от декорирования имен аля С++, а теперь через extern - позволили дотянуться из Unit1.cpp к статическому массиву gProg объявляемому в Parser.c.
Не забудь оставить на месте тип элементов массива extern tBog gProg[];

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 01 февраля 2011 22:22 · Поправил: Isaev
· Личное сообщение · #17

А если подключаю модуль из него возможно лог в memo на основной форме выводить?
наверное снова extern но куда его влепить пока не нашёл

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 02 февраля 2011 22:22
· Личное сообщение · #18

*help*

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh



 eXeL@B —› Оффтоп —› C++

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати