Zamiana adresu funkcji

Zamiana adresu funkcji
MA
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:12
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?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 18 godzin
1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 16 godzin
  • Lokalizacja:Szczecin
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?


MA
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:12
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

edytowany 1x, ostatnio: mattipr
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
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?

MA
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:12
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.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Azarien
bez znaczenia jest też czy alokuje na stosie czy na stercie - przecież kod nie jest na stosie, stos może być gdziekolwiek.
MA
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:12
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.

edytowany 2x, ostatnio: mattipr
ŁF
mb - milibity?
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.