A
A
Alikhan Khartumov2014-08-02 20:22:08
Programming
Alikhan Khartumov, 2014-08-02 20:22:08

How to compile C++ application with code and makefile?

I have no programming experience, but I need to compile C++ code.
There is a code and a makefile. On the recommendation, I tried to build using MinGW, but nothing came out. It
gives the following errors:

C:\MinGW\bin>mingw32-make.exe
Makefile:8: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop
.

C:\MinGW\bin>mingw32-make.exe
g++    -c -o ddwrtcg.o ddwrtcg.cpp
process_begin: CreateProcess(NULL, g++ -c -o ddwrtcg.o ddwrtcg.cpp, ...) failed.

make (e=2): Не удается найти указанный файл.
<builtin>: recipe for target 'ddwrtcg.o' failed
mingw32-make: *** [ddwrtcg.o] Error 2

C:\MinGW\bin>mingw32-make.exe
gcc  -o ddwrtcg ddwrtcg.o
ddwrtcg.o: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
Makefile:8: recipe for target 'ddwrtcg' failed
mingw32-make: *** [ddwrtcg] Error 1

Computer parameters:
Processor: AMD Athlon(tm) 64 X2 Dual Core
RAM: 4 GB
OS: Windows 7 X64.
Please point out the errors or help to compile good people). Thank you.
I post the makefile:
CC      = gcc
CFLAGS  = -Wall -Wwrite-strings
LD      = gcc
LDFLAGS =
LIBS    =

ddwrtcg: ddwrtcg.o
  $(LD) $(LDFLAGS) -o [email protected] $(LIBS)$^

clean:
  -rm -f ddwrtcg.o ddwrtcg.exe

%.o: %.c
  $(CC) $(CFLAGS) -c -o [email protected] $^

And the code itself:
#include <stddef.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define ARC4_STATE_LEN          256
#define ARC4_MAX_STREAMLEN      0x40000000

#define DDWRT_KEY_LEN           28
#define DDWRT_CODE_LEN          64

struct arc4ctx {
        unsigned char state[ARC4_STATE_LEN];
        unsigned long len;
        unsigned char i;
        unsigned char j;
};

struct ddwrt_key {
        unsigned char   key[DDWRT_KEY_LEN];
        uint32_t        crc;
};

static const uint32_t crc32tab[256] =
{
    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
    0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
    0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
    0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
    0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
    0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
    0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
    0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
    0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
    0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
    0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
    0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
    0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
    0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
    0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
    0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
    0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
    0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
    0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
    0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
    0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
    0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
    0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
    0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
    0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
    0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
    0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
    0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
    0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
    0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
    0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
    0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
    0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
    0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
    0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};

static uint32_t getcrc32(unsigned char *buf, unsigned long len, uint32_t crc)
{
        while (len--)
                crc = (crc >> 8) ^ crc32tab[(crc ^ *buf++) & 0xff];

        return crc;
}

static const uint8_t hexchars[16] = "0123456789ABCDEF";
static inline uint8_t hex2char(uint8_t c)
{
        int i;

        for (i = 0; i < sizeof(hexchars); i++) {
                if (hexchars[i] == c)
                        return i;
        }

        return 0;
}

static void hex2key(char *hex, unsigned char *code)
{
        int i;

        for (i = 0; i < 32; i++) {
                uint8_t c1, c2;

                c1 = hex2char(hex[2 * i]);
                c2 = hex2char(hex[2 * i + 1]);

                *code++ = (c1 << 4) | c2;
        }
}

static void arc4init(struct arc4ctx *ctx, void *key, int keylen)
{
        uint8_t *state = ctx->state;
        uint8_t *p = key;
        int i;
        uint8_t j;
        uint8_t k = 0;

        ctx->len = 0;
        for (i = 0; i < ARC4_STATE_LEN; i++)
                state[i] = i;

        ctx->i = 0;
        ctx->j = 0;

        for(i = 0, j = 0; i < 256; i++, j = (j + 1) % keylen) {
                uint8_t t;

                t = state[i];
                state[i] = state[k += p[j] + t];
                state[k] = t;
        }

}

static int arc4crypt(struct arc4ctx *ctx, uint8_t *src, uint8_t *dst, int len)
{
        uint8_t *state = ctx->state;
        uint8_t i, j;
        int k;

        ctx->len +=len;
        if (ctx->len > ARC4_MAX_STREAMLEN)
                return -1;

        i = ctx->i;
        j = ctx->j;
        for (k = 0; k < len; k++) {
                uint8_t t;

                t = state[j += state[++i]];
                state[j] = state[i];
                state[i] = t;

                dst[k] = src[k] ^ state[(state[i] + state[j]) & 0xff];
        }
        ctx->i = i;
        ctx->j = j;

        return len;
}

static void printkey(struct ddwrt_key *key)
{
        uint8_t *p = (uint8_t *)key;
        int i;

        for (i = 0; i < 32; i++)
                printf("%02X", p[i]);

        printf("n");
}

static void usage(int err)
{
        fprintf(stderr, "Usage: ddwrtcg <mode> <code>\n"
                        "valid modes:\n"
                        "  -a   generate activation code for dd-wrt professional\n"
                        "  -s   generate activation code for dd-wrt's superchannel feature\n");
        exit(err);
}

int main(int argc, char *argv[])
{
        struct arc4ctx ctx;
        struct ddwrt_key ckey;
        struct ddwrt_key dkey;
        uint32_t crc;
        char *pwd = NULL;
        char *mode;
        char *code;

        fprintf(stdout, "DD-WRT v24-sp1 activation code generator by DasIndividuumn\n");

        if (argc != 3)
                usage(1);

        mode = argv[1];
        if (strcmp(mode, "-a") == 0) {
                pwd = "quampfmampf";
        } else if (strcmp(mode, "-s") == 0) {
                pwd = "schannelsuper";
        } else {
                fprintf(stderr, "ddwrtcg: unknown mode %s\n", mode);
                usage(2);
        }

        code = argv[2];
        if (strlen(code) != DDWRT_CODE_LEN) {
                fprintf(stderr, "ddwrtcg: code length must be %d\n",
                        DDWRT_CODE_LEN);
                exit(3);
        }

        hex2key(code, (uint8_t *)&ckey);
        crc = getcrc32(ckey.key, sizeof(ckey.key), 0xffffffff);
        if (crc != ckey.crc) {
                fprintf(stderr, "ddwrtcg: invalid code\n");
                exit(4);
        }

        arc4init(&ctx, pwd, strlen(pwd));
        arc4crypt(&ctx, (uint8_t *)&ckey, (uint8_t *)&dkey, sizeof(dkey));

        printkey(&dkey);

        exit(0);
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
J
jcmvbkbc, 2014-08-02
@GiaNT_05

it will probably be easier for you to write on the command line
you figured out what was wrong
You probably don't have g++ installed. And why, the code is clearly in pure C.
I don't know how you got ddwrtcg.o, but it doesn't look like it's an object file.

D
domu, 2014-08-03
@domu

It is clearly written that there are spaces instead of tabs in the makefile (there should be tabs). Fix it and everything will work.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question