Zamiana adresu funkcji

0

Hej, mam taki problem że, mam funkcję której chciałbym przypisać nowy adres (specjalnie wcześniej wydzielony). Czytam o wskaźnikach funkcyjnych jednak nie mogę znaleźć odpowiedzi czy taka możliwość istnieje. Jakieś propoyzcje?

1

Nie rozumiem po kiego chcesz robić takie dziwolągi?
Oprócz wirusów - nie widzę zastosowań.

0

W uproszczeniu: nie, nie możesz zmienić adresu istniejącej funkcji. Tzn. zapewne jest to możliwe za pomocą jakiegoś jita/odpowiednich syscalli, ale bardzo wątpię, żebyś faktycznie potrzebował zmienić adres funkcji.

Może miałeś na myśli przypisanie nowej funkcji do już istniejącego wskaźnika?

0

Ponieważ na windows ce brakuje mi wirtualnej pamięci na wykonanie pewnych operacji. W tym wypadku chciałbym użyć Large Memory Area i tam wrzucić daną funkcję aby nie zabierała mi pamięci wirtualnej tylko była uruchamiana strikte w pamięci fizycznej. I znalazłem funckję VirtualAlloc którą alokuje miejsce w pamięci i przydzielam ją do wskaźnika, i chciałbym żeby adres który jest zaalokowany został przydzielony mojej funckji. Mam nadzieję że jasno się wyraźiłem

PS: No chyba że mam złe spojrzenie na problem

1

Ja chyba nie rozumiem. Co ma wspólnego lokalizacja funkcji w pamięci (tzn listy operacji do wykonania) z lokalizacją jakichś danych? Bo przecież to dane zabierają ci pamięć a nie te kilka bajtów na instrukcje zawarte wewnątrz funkcji? o_O

1

extern void foobar (void) attribute ((section ("bar"))); ?

Ew. zmodyfikować startup code, żeby na etapie inicjalizacji przerzucił gdzieś funkcję a potem odwołanie przez wskaźnik?

0

Tak masz rację, jednak nie mam dostępu do tej funkcji i nie wiem jakie dane są przetwarzane. Chciałbym po prostu całe działanie funkcji przenieść w obszar pamięci fizycznej, i szukam jakiegoś konkretnego rozwiązania problemu.

0

@mattipr ale to na 99% wcale ci nie pomoże. Skoro funkcja potrzebuje dużo pamięci to znaczy ze nie alokuje jej na stosie tylko na stercie. Więc zupełnie bez znaczenia jest lokalizacja tej funkcji bo korzysta ona z pamięci w zupełnie innym miejscu.

0

yhym, @Shalom, a masz jakieś pomysły jak mógłbym to zrobić_ Problem polega na tym że, uruchamiam kamerę na win ce 5.0 i kiedy próbuję zrobić zdjęcie to wtedy się zawiesza. Jak śledziłem wycieki i logi doszedłem że sterownik kamery potrzebuje 6 Mb a ja w danym momencie mam 5 Mb wirtualnej pamięci. Jedyna szansa to na sztywno przydzielić procesowi robienia zdjęć pamięć ram. Tak to widzę, bo nie wchodzi w grę optymalizacja czy szukanie wycieków pamięći.

1

Jeśli na prawdę chcesz cokolwiek zrobić, to musiałbyś się po prostu wpieprzyć w ten program. Różnie to może wyglądać na tym windows ce, nigdy tego na oczy nie widziałem, ale pewnie można ładować w nim dllki, przez co w sumie możesz walnąć dll injectora, zrobić hooka na początku tej funkcji, i po prostu skoczyć do własnej funkcji, która w dllce jest i wykonać swoje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1