Call malloc – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Call malloc – Assembler – Fórum – Programujte.comCall malloc – Assembler – Fórum – Programujte.com

 

BigBear0
Stálý člen
29. 4. 2010   #1
-
0
-

Ahojte, pracuji ve skole s inline assemblerem (C++) a nechapu, kde mam chybu. Koukal jsem se po netu, do skript a hledal jsem dal a bud neco stale prehlizim, nebo bych to mel mit dobre. Toto je muj kod

#include <stdlib.h>


void blah()
{
_asm {
mov ecx, 4 // pocet prvku, na ktere chci alokovat misto (4 ukazatele)
inc ecx // pridam jeden prvek, (pro NULL)
shl ecx, 2 // jelikoz jsou prvky ukazatele, tak nasobim ctyrma
push ecx // na zasobnik si dam parametr funkce malloc
call malloc // zavolam malloc
add esp, 4 // stahnu parametr funkce
// nyni bych tedy mel mit v eax alokovanou pamet na 20bajtu
}
}

void main()
{
blah();
}
To je ale problem, protoze mi to shodi aplikaci. Kdyz to projizdim debuggerem, tak vse probiha dobre, ale volani funkce malloc mi vyhodi neodchycenou vyjimku, presne vyhodi hlasku:

Unhandled exception at 0x004182c0 in app.exe: 0xC0000005: Access violation writing location 0x7ffe2486.

Cim to je? Dekuji

Nahlásit jako SPAM
IP: 94.74.255.–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
illioner0
Stálý člen
29. 4. 2010   #2
-
0
-

nic mě nenapadá, můžeš zkusit includovat <malloc.h>

Nahlásit jako SPAM
IP: 83.208.64.–
Nechápu softwarové firmy, ktere utrácejí za čim dál těžkopádnější DRM ochranu!! Vidět kolem snahu o free2play model je jako příjemné připomenutí časů shareware (jen ten Microsoft stále nic nepochopil)
BigBear0
Stálý člen
29. 4. 2010   #3
-
0
-

Zkusil jsem a nefunguje... jeste bych mohl zminit, ze pouzivam Visual Studio 2005, treba to muze byt o nejakem nastaveni, nebo tak... fakt nevim :-(

Nahlásit jako SPAM
IP: 94.74.255.–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
BigBear0
Stálý člen
29. 4. 2010   #4
-
0
-

Tak mam odpoved. Nakonec mi na to odpovedel muj ucitel. Asi jsem zrovna nedaval pozor, pry nam to rikal ve skole :-[... V implicitnim nastaveni Visual Studio 2005 a Visual Studio 2008 jsou funkce standardni knihovny volany pres tabulku adres (tzn ze funkce malloc je vlastne promenna typu pointer na funkci). Pokud ji chci zavolat, musim tedy pouzit

call dword ptr malloc
nebo nastavit projekt Visual Studia


1) kliknout pravym tlacitkem na titulek projektu v Solution Exploreru a zvolit Properties
2) dale zvolit statickou CRT knihovnu C/C++ ... Code Generation ... Runtime Library
3) nastavit Multi-threaded Debug (/MTd)

a nyni uz mohu klidne volat jen
call malloc
nebo
call printf
atd. :-)

Nahlásit jako SPAM
IP: 94.74.255.–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 183 hostů

Podobná vlákna

Malloc retazec — založil Carmagedon

2d pole malloc vo funkcii — založil wrany

Alokacia malloc - pad — založil Ludo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý