PDA

View Full Version : ادرس تابع



amir_civil
چهارشنبه 29 مهر 1388, 00:54 صبح
سلام
فرض کنید که یه تابع داریم به اسم amir (مثلا تو سی++)
حالا چه جوری میشه ادرس این تابع رو وقتی برنامه اجرا میشه بدست اورد؟(منظورم تو خود برتامه و با برنامه نویسی هست)

GioTiN
چهارشنبه 29 مهر 1388, 09:02 صبح
دقيق منظورت رو متوجه نشدم ولي در حدي كه فهميدم راهنمائيت ميكنم .
بايس روي همين تابع بريك پوينت set‌ كني و وقتي برنامه داره اجرا ميشه يا زماني كه برنامه داره ازش استفاده ميكنه روي اين تابع استفاده شده متوقف ميشي !
باي

amir_civil
پنج شنبه 30 مهر 1388, 00:17 صبح
سلام
مثل هر تابع api که تو دی ال ال هست و یه ادرسی داره میخام بدونم که تابعی که ما تو برنامه مینویسیم هم یه ادرس به خصوص داره؟

HDDSoft2001
پنج شنبه 30 مهر 1388, 01:44 صبح
با سلام

من یه زمانی پاسکال کار میکردم (خیلی وقت پیش)
تو پاسکال به روش زیر بود البته اگه سینتکش درست باشه. در ضمن توی دات نت این را با نام delegate (نماینده) میشاسن.
البته اگه منظورتون رو درست متوجه شده باشم.


var p : procedure;
procedure a (int a)
begin
...
end;
.
.
.
begin
p:=*a;
^p(4); // call func a
end;

MohsenTi
پنج شنبه 30 مهر 1388, 02:58 صبح
آدرس تابع را در C++‎ به شکل &Func ودر پاسکال به صورت @Func پیدا می کنید.
@ و & سمت چپ تابع است

FastCode
پنج شنبه 26 آذر 1388, 19:30 عصر
unsafe int amir()
{
byte a;
return &a;
}
توی C# اینجوریه(تا اونجا که یادمه).
اگر می خوای کد تابع را عوض کنی باید توش همواقدر متغیر تعریف کنی.
http://stackoverflow.com/questions/1551359/how-to-run-some-code-in-memory

saeedIRHA
دوشنبه 30 آذر 1388, 22:12 عصر
فک کنم این به دردت بخوره ، برای استفاده شخصی نوشتم :


//================================================== ==========================
// Name : ProcAddress.cpp
// Author : SaEeD
// Description : Return Hex Value of Process Address in DLLs
//================================================== ==========================

#include <iostream>
#include <windows.h>
using namespace std;

int main(int argc, char *argv[])
{
HINSTANCE hInstance = NULL;
int addr=0;
if(argc !=3)
{
cerr << "Usage: " << argv[0] << " <DLL Name> <Function Name> " << endl;
exit(-1);
}
hInstance = LoadLibraryA(argv[1]);
if(hInstance != NULL)
{
addr = (int)GetProcAddress(hInstance,argv[2]);
if(addr ==0)
{
cerr<< "[-]Address NOT Found :-(" << endl;
exit(-1);
}
cout<< "[+]Process Address is : 0x" << hex << addr <<endl;;
FreeLibrary(hInstance);
}else{
cerr<< "[-]Cannot load the Library. :-(" << endl;
exit(-1);
}
return 0;
}