23. maj 2005 - 11:03
Der er
10 kommentarer og 1 løsning
søger absolut slamkode
ok, selve mit spørgsmål skal nok udbedres lidt mere. jeg er ved at lave en håndfuld guides, til forskellige sprog. Lige nu er jeg nået i alfabetet til C.... jeg har brug for at "absolut slam kode", men det skal sadfølig virke efter hensigten. hehe Så find nolge af dine gamle koder frem igen, og submit dem... hehe
Annonceindlæg fra DE-CIX
ok.. det er godt nok slam kode.. hehe
der må da være nogle flere som kender til noget slamkode...hehe
Denne virker kun med g++ og Digital Mars: #include <iostream> int main(void) { unsigned int f[] = {0x8BE58955, 0x45030C45, 0x90C35D08}; int a = ((int (*)(int, int))f)(31, 11); std::cout << a << std::endl; return 0; }
Og et "lille" program til at lægge meget store tal sammen: #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char **argv) { if (argc != 3 || strlen(argv[1]) > 1000 || strlen(argv[2]) > 1000) return 1; argv[0] = (char *)calloc(127, 1); strcpy(argv[0], argv[1]); argv[1] = argv[0]; memmove(&argv[1][1], argv[1], strlen(argv[1]) + 1); argv[1][0] = '0'; argv[0] = (char *)calloc(127, 1); strcpy(argv[0], argv[2]); argv[2] = argv[0]; memmove(&argv[2][1], argv[2], strlen(argv[2]) + 1); argv[2][0] = '0'; argc = strlen(argv[1]) - strlen(argv[2]); if (argc > 0) { memmove(&argv[2][argc], argv[2], strlen(argv[2]) + 1); for (argv[0] = argv[2]; argc >= 0; argc--, argv[0]++) argv[0][0] = '0'; } else if (argc < 0) { argc = -argc; memmove(&argv[1][argc], argv[1], strlen(argv[1]) + 1); for (argv[0] = argv[1]; argc >= 0; argc--, argv[0]++) argv[0][0] = '0'; } argv[0] = (char *)calloc(127 + 2, 1); argv[0][0] = '0'; for (argc = strlen(argv[1]) - 1; argc > 0; argc--) { argv[2][argc] -= '0'; for (argv[0][127] = 0, argv[0][127 + 1] = 0; argv[0][127] < 8; argv[0][127]++) { argv[0][argc] |= ((argv[1][argc] & (1 << argv[0][127])) ^ ( argv[2][argc] & (1 << argv[0][127])) ^ (argv[0][127 + 1] << argv[0][127])); argv[0][127 + 1] = !!(((argv[1][argc] & (1 << argv[0][127]))) & ((argv[2][argc] & (1 << argv[0][127])))) | (argv[0][127 + 1] & (!!(((argv[1][argc] & (1 << argv[0][127]))) | ((argv[2][argc] & (1 << argv[0][127])))))); } if (argv[0][argc] > '9') { argv[0][argc] -= 10; argv[0][argc - 1]++; } } if (argv[0][0] == '0') printf("\n%s\n", &argv[0][1]); else printf("\n%s\n", argv[0]); return 0; }
jeg har godt nok aldrig set så meget slam i samme spørgsmål.. hehe :) Det ser godt ud bertelbrander... :)
Der er måske nogen der ikke forstår denne: unsigned int f[] = {0x8BE58955, 0x45030C45, 0x90C35D08} int a = ((int (*)(int, int))f)(31, 11); Det der sker er at f bliver castet til en funktions pointer, og denne funktion bliver kaldt med argumenterne 31 og 11. a bliver tilskrevet returværdien fra funktionen. Enhver der kan et minimum af assembler kan se at "funktionen" retunerer summen af de to tal. a bliver derfor 42.
bertelbrander >> Jeg har aldrig set så meget slam på en side.. heheh :) Det er lige hvad jeg har brug for, nok skal jeg pille lidt ved det, men så kan jeg få nolge sjove timer til at gå med find+replace. bertelbrander er du stadigvæk på diæt ?? Arne_v du må gerne smide et svar
Jeg samler stadig ikke på point.
bertelbrander >> Tak for hjælpen, det bliver renere og renere ;) Arne_v >> Tak for hjælpen.
Kurser inden for grundlæggende programmering