Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- GoodSpeed: Nem vénnek való vidék - Berettyóújfalu
- eBay-es kütyük kis pénzért
- Lalikiraly: Astra kalandok @ Negyedik rész
- Meggyi001: Kórházi ellátás: kuka vagy finom?
- koxx: Bloons TD5 - Tower Defense játék
- sh4d0w: StarWars: Felismerés
- Brogyi: CTEK akkumulátor töltő és másolatai
Új hozzászólás Aktív témák
-
ZTE_luky
senior tag
Sziasztok, ismét én, zárójelben kezdő vagyok, és C nyelvben kellene egy programot megírnom ami lényegében felistem karaktereket (utasításokat) és lefordítja azokat.
pl: első sor: ADD R4 R5 RA
ADD-nak az utasításkódja 1, és összeadás a jelentése, az utána lévő registerek pedig: az 5-ös és az A-dik registerben lévő elemeket adja össze és rakja a 4-es regiszterre.ezt a következőképp kéne kiiratni:
10:145Atényleg nem fontos hoyg ez mire kell, lényeg hogy egy output file-t hozzunk létre egy inputból ezzel a c-vel ami sorokat hoz létre 10 11 12 13 stb stb.. kezdettel, rak utána egy kettőspontot, és kiírja a parancs megfelelőjét, hoyg azt le lehesen futtatni. Talán ha elolvassáto ka kódot rájöttök. nem is ez a lényeg. A lényeg az hogyha az input bármilyen érvénytelen karaktert tartalmaz írjon ki FFFF-et és álljon le, a szókö és sortörést ignorálja. úgy oldottam meg hogy beolvas egy sztringet, azt átírja, majd olvassa a kövit és az is, de valamiért nem fut le. azzal van gond hoyg nem áll le ( c != EOF) valamint nem olvassa be a következő sztringet (sort) ott a state inkrementálással van baj, valamiért. elég sokat foglalkoztam vele de nem megy, valaki legyen szíves segítsen köszönöm!
#include<stdio.h>
#include<string.h>
#define SIZE 9
//DEBUG -- Buffer Overflow, Read the following string
int main()
{
char c;
int counter = 0;
int no[] = {0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B};
char string[SIZE];
int state = 0;
int op;
char r1;
char r2;
char r3;
int i = 0;
int o = 0;
for (state = 0; c != EOF; ) //reading the strings
{
for (o = 0; o < 10 ;) // get the characters on a string
{
c = getchar();
if(c != 0x20 && c != 0xA && c != 0x2C) // ignore whitespaces and \n
{
string[counter] = c;
counter++;
o++;
}
}
// ---------- Search Function (Operating Code) ----------
if (string[0] == 0x41 && string[1] == 0x44 && string[2] == 0x44)
{
op = 1; //add
state++;
no[i]++;
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
else if (string[0] == 0x53 && string[1] == 0x55 && string[2] == 0x42)
{
op = 2; //sub
state++;
no[i]++;
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
else if (string[0] == 0x41 && string[1] == 0x4E && string[2] == 0x44)
{
op = 3; //and
state++;
no[i]++;
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
else if (string[0] == 0x58 && string[1] == 0x4F && string[2] == 0x52)
{
op = 4; //xor
state++;
no[i]++;
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
else if (string[0] == 0x53 && string[1] == 0x48 && string[2] == 0x4C)
{
op = 5; //shl
state++;
no[i]++;
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
else if (string[0] == 0x53 && string[1] == 0x48 && string[2] == 0x52)
{
op = 6; //shr
state++;
no[i]++;
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
else if (string[0] == 0x48 && string[1] == 0x4C && string[2] == 0x54)
{
op = 0; //halt
}
else printf("FFFF\n");
//---------- Define Register's Value ----------
//---------- Print the current string ----------
r1 = string[4];
r2 = string[6];
r3 = string[8];
printf("%X:%d%c%c%c\n",no[i],op,r1,r2,r3);
o = 0;
}
return 0;
}Itt egy input file példának, és tesztelésnek:
ADD R4 R5 RA
AND RF R2 R3
XOR R1 RE RA
HLTRÖVIDEN: csak az a probléma hogyha felismer egy utasítást, inkrementálja a state-t majd ugorjon vissza a loop elejére, és csináljon meg mindent újra, és írja ki a kövi sort. itt van a legfőbb probléma szerintem. a másik a bufferrel van szerintem, mert ezt írja hibaüzenetnek:
*** stack smashing detected ***: ./1531726 terminated
Aborted (core dumped)
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Ezzel jobban keresel, mint az arannyal
- Ne várj sokat a vásárlással: drágulás a láthatáron
- A jövőre utal a CoD: Black Ops 7 egy új beállítása?
- Fejhallgató erősítő és DAC topik
- Káprázatos űremléket állított Jeff Bezos az édesanyjának
- OLED TV topic
- BestBuy topik
- Valami baja van a tápomnak
- CASIO órák kedvelők topicja!
- Milyen processzort vegyek?
- További aktív témák...
- Szép állapotú Wireless Xbox Stereo Headset
- Ryzen 7 5800X3D + Strix B550-A + 32GB Corsair Dominator + RX 7900 XTX NITRO+ 24G + 1200W 80+ plat
- HP ZBook Fury G8 - RTX A3000 - ajándék dokkolóval és laptop hűtővel
- Heatkiller Tube 100 D5 - full extra
- Gigabyte AORUS 17 - i7-12700H - RTX 3070 Ti - 32GB RAM - 1TB M2 SSD -FHD 360H- eredeti csomagolásban
- Apple iPhone X Space Gray Ikonikus dizájn, Face ID, OLED kijelző 64 GB Használt, megkímélt ,100%
- BESZÁMÍTÁS! GIGABYTE Z370P PRO i7 9700 16GB DDR4 512GB SSD RTX 2070 SUPER 8GB CM TD500 700W
- ÁRGARANCIA! Épített KomPhone Ultra 9 285K 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Honor 200 Lite, Honor 200, Honor 200 Pro, Honor 200 Smart
- HIBÁTLAN iPhone 13 Pro 128GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3388, 100% Akksi
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest

