PDA

View Full Version : سوال: انتقال فایل به Ram و اجرای آن



Nima NT
سه شنبه 04 تیر 1387, 21:42 عصر
با سلام , یه سوال داشتم ؟؟؟
می خواستم ببینم که چه طوری میشه از یه فایل رو از روی هارد به رم منتقل و همون جا هم اجراش کرد , من این کار رو تو دلفی دیدم ولی تو VB ویا C# خیر !
فایل اجرائی هم میتونه دات نتی باشه هم غیره
اگه کسی می دونه کمکم کنه.
در ضمن یه کد هم ÷یدا کردم واسه VBبود ولی کار نکرد.


Dim fs As New IO.FileStream("C:\\110.exe", IO.FileMode.Open, IO.FileAccess.Read)
Dim br As BinaryReader = New BinaryReader(fs)
Dim bin As Byte() = br.ReadBytes(Convert.ToInt32(fs.Length))
' fs.Close(br.Close())
Dim a As Assembly = Assembly.Load(bin)
Dim method As MethodInfo = a.EntryPoint
MsgBox(a.EntryPoint.GetHashCode)

Dim o As Object = a.CreateInstance(method.Name)
method.Invoke(o, New Object())

__H2__
چهارشنبه 05 تیر 1387, 01:09 صبح
سلام
این سوالتان را گمانم جای دیگری هم دیده بودم...!؟
اگر منظورتان اجرا کردن یک exe است، همچین کاری به همین سادگی امکان پذیر است


System.Diagnostics.Process.Start("calc.exe")

vcldeveloper
چهارشنبه 05 تیر 1387, 04:20 صبح
می خواستم ببینم که چه طوری میشه از یه فایل رو از روی هارد به رم منتقل و همون جا هم اجراش کرد
مسلما CLR دات نت، که یک محیط مدیریت شده برای نرم افزارهای دات نتی فراهم میکنه، در مورد اجرای کدی از Data Segment سختگیری بیشتری میکنه، واجازه نمیده به این راحتی داده ایی که در Data Segment قرار دارد را اجرا کنید، چون این امر میتونه زمینه ایی برای نوشتن انواع کدهای مخرب بشه!

البته اگر هدف فقط اجرای یک فایل روی هارد هست، جوابش را در پست شماره 2 دریافت کردید.

Nima NT
چهارشنبه 05 تیر 1387, 10:54 صبح
با تشکر فراوان از دوستان
ولی منظور من اجرای برنامه تو Ram بود.
حالا حتما" هم لزومی نداره که برنامه من دات نتی باشه , مثلا" یه برنامه دات نتی داشته باشیم که یه فایل WIN32 بنویسه رو رم و اجراش کنه ( همون کاری که تو دلفی با کلاس Tmemory Stram انجام می دن )
ممنون.

vcldeveloper
چهارشنبه 05 تیر 1387, 17:17 عصر
همون کاری که تو دلفی با کلاس Tmemory Stram انجام می دن
توی کلاس TMemoryStream دلفی همچین کاری را بطور عادی انجام نمیدند! برای Delphi for Win32 قبلا Inprise یک نمونه سورس کد معرفی کرده بود که می تونید با جستجو پیدا کنید.

__H2__
چهارشنبه 05 تیر 1387, 19:17 عصر
سلام
من دلفی کار نکردم و اصلاً خوشم هم نمی آید، ولی یکبار دیگر سعی میکنم کمکتان کنم، اگر بفهمم این کد دلفی چی میکرده!


... یه فایل WIN32 بنویسه رو رم و اجراش کنه...
یعنی منظورتان ان است که فایل exe وجود ندارد و کدش هم معلوم نیست، قرار است کدی در runtime تولید شود و سپس هم اجرا شود، همچین کاری میخواهید انجام دهید؟

Nima NT
چهارشنبه 05 تیر 1387, 23:59 عصر
نه این طوری نیست , من یه فایل اجرائی دارم و می خوام اون رو مستقیما" رو Ram اجراش کنم که بعد از این کار بشه فایل رو از روی هارد پاک کرد.

__H2__
شنبه 08 تیر 1387, 01:28 صبح
سلام
خوب حالا واضح تر و بهتر شد.
این عمل به صورت کامل در دات نت وجود دارد، ولی فقط برای خود کدهای کامپایلی دات نت، حال چه exe باشد و چه dll.
میتوانید آرایه بایتی شامل فایل مذکور را به کمک دستور System.Reflection.Assembly.Load بارگذاری کنید و اجرا کنید.

ولی در مورد فایل های غیر دات نت فقط میتوان فایل موقتی در پوشه Temp تشکیل داده و از آنجا برنامه را اجرا کرد، والبته به راحتی میتوان به محض بسته شدن برنامه، فایل مذکور را حذف کرد.

Nima NT
دوشنبه 10 تیر 1387, 23:02 عصر
بسیار ممنومم , میشه یه مثال ساده هم از این کار برام بذارین , هر کاری کردم برنامه متوقف شد ( فایل اجرائی رو ریختم تویه آرایه بایت و طبق فرمایش شما عمل کردم ولی هیچ اتفاقی رخ نداد )
ممنون میشم بیشتر کمکم کنید.

__H2__
پنج شنبه 13 تیر 1387, 01:33 صبح
سلام
مثلاً با این کد...


Dim exe As System.Reflection.Assembly = System.Reflection.Assembly.Load...
Dim thread As New System.Threading.Thread(AddressOf _EXEC)
thread.Start(exe)

'...

Private Shared Sub _EXEC(ByVal exe As Object)
DirectCast(exe, System.Reflection.Assembly).EntryPoint.Invoke(Noth ing, New Object() {})
End Sub