[c++] wstawki asemblerowe, usuwanie pliku


(Mzabolski) #1

Hej, mam zrobić prosty menadżer plików, który sortuje, dodaje i usuwa pliki. Utrudnieniem jest to że główne funkcje mają być napisane w asemblerze. Na razie mam zrobione tylko sortowanie, bo nie znalazłem nigdzie informacji o tym jak usuwać i dodawać pliki. Czy możecie jakoś mi pomóc?


([alex]) #2

piszesz w C++ w main:

unlink(“plik.txt”);

odpalasz debugier, dochodzisz do tego unlink, przełączasz się w tryb instrukcji assemblerowych wchodzisz w call _unlink i odczytujesz sobie.


(Mzabolski) #3

Hej, dzięki za odpowiedź ale nie do końca rozumiem. W programie mam wpisać nazwę pliku, po czym asembler ma go usunąć.

Napisałem coś takiego, ale nie działa

void erasefile(char erase[])

{

std::cout << erase << std::endl;

std::string erasestring = erase;

unlink(erasestring);

__asm{

mov AH, 41

mov dx, word ptr erasestring

mov ds, dx

mov dx, offset erasestring

}

}


(Rolek0) #4

Podstawowe pytanie: Jaki system i architektura?


(Mzabolski) #5

Windows x86


(Rolek0) #6

Do usuwania plików na Windowsie służy funkcja DeleteFile (DeleteFileA przyjmuje nazwę kodowaną w lokalnej stronie kodowej, DeleteFileW przyjmuje UTF-16 LE) z pliku kernel32.dll, konwencja wywołania na 32-bit to stdcall. Robienie wstawki asm dla wywołania pojedynczej funkcji jest według mnie bezsensowne ale jeśłi bardzo chcesz. Najprawdopodobniej będziesz musiał owrapować tą funkcję bo nie wiadomo jak twój kompilator obsługuje funkcje importowane (może sie to różnić nawet w zależności od ustawień).


(Mzabolski) #7

dzieki, moze faktycznie nie bede tego robil asemblerem. A jak z dodawaniem pliku?


(Rolek0) #8

Do tworzenia (i otwierania) pliku jest CreateFile.

Do poczytania też http://msdn.microsoft.com/en-us/library/aa364229.