هل يمكن كتابة تعليمات أسمبلي في السي شارب؟
وشكرا
هل يمكن كتابة تعليمات أسمبلي في السي شارب؟
وشكرا
في البداية يسخرون منك . . . ثم يهملونك . . . ثم يحاربونك . . . ثم تنتصر
أخي العزيز Ben_Laiid هل لك أن تشرح لي كيفية وضع التعليمات في ملف DLL؟؟؟
والأخ hazzoom هل يمكن كتابة تعليمات أسمبلي في فيجوال بيسك كونك(مشرف في قسم Visual Basic .NET)؟؟؟؟
ولكم مني جزيل الشكر؟؟؟
في البداية يسخرون منك . . . ثم يهملونك . . . ثم يحاربونك . . . ثم تنتصر
اعتقد انة لايمكن ذلك إلا بطرق وعرة وغير مباشرة. :)
Using Unmanaged code and assembler in C#
زي ما انت شفت في المواضيع اللي حطيتها أنا والأخوه واللي ينطبق علي سي شارب ينطبق علي في بي , يعني ممكن تعمل مكتبة خارجية وتستدعيها عليها من الكود ,,,
السلام عليكم
أخي بإمكانك أن تستعمل المثال التالي:
extern "C" __declspec(dllexport) int __stdcall getCPUSpeed()
{
LARGE_INTEGER ulFreq, ulTicks, ulValue, ulStartCounter, ulEAX_EDX, ulResult;
// it is number of ticks per seconds
QueryPerformanceFrequency(&ulFreq);
// current valueofthe performance counter
QueryPerformanceCounter(&ulTicks);
// calculate one second interval
ulValue.QuadPart = ulTicks.QuadPart + ulFreq.QuadPart;
// read time stamp counter
// this asm instruction load the highorder 32 bit of the register into EDX
// and the lower order 32 bits into EAX
_asm {
rdtsc
mov ulEAX_EDX.LowPart, EAX
mov ulEAX_EDX.HighPart, EDX
}
// start no of ticks
ulStartCounter.QuadPart = ulEAX_EDX.QuadPart;
// loop for 1 second
do {
QueryPerformanceCounter(&ulTicks);
} while (ulTicks.QuadPart <= ulValue.QuadPart);
// get the actual no of ticks
_asm {
rdtsc
mov ulEAX_EDX.LowPart, EAX
mov ulEAX_EDX.HighPart, EDX
}
// calculate result
ulResult.QuadPart = ulEAX_EDX.QuadPart - ulStartCounter.QuadPart;
return (int)ulResult.QuadPart / 1000000;
}التعليمة التالية تحدد بها أن هذه الدالة التي عرفتها في المكتبة سيتم إستدعائها لاحقا من كود خارجي
extern "C" __declspec(dllexport) int __stdcall MyMethodName()
وكما ترى هنا الكود بلغة الآلة يضف في جزء مستقل تبدأه ب _asm
_asm {
rdtsc
mov ulEAX_EDX.LowPart, EAX
mov ulEAX_EDX.HighPart, EDX
}يبقى أن تتأكد جيدا من كيفية تمرير البيانات بين السي و السي شارب وعادة أحبذ إستعمال النوع CStringلإيجابياته الكثيرة
بإمكانك الإطلاع على مكتبة أكواد قسم برمجة الأجهزة الكفية والهواتف الذكية حيث أمثلة ستساعك فيما تبحث
لقد نسيت بقية السؤال :D
كي تنشأ ملف:
1. في الفيزوال سي إختر New Project/ Others languages/Visual C++ / Win32
2. ثم إختر نوع المشروع Win32 project و أكتب إسم المكتبة التي تريد إنشائها OK/Next/DLL
أعني بالرمز "/" الإختيار الموالي
في نهاية هذه المراحل ستفتح لك نافذة المشروع وداخلها الكود التالي:
// MyDLL.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endifدع هذا الكود كما هو وأضف الدوال إثر هذا الكود.
عندما تنقر ويتم تنفيذ الكود بنجاح ستجد المكتبة في المجلد bin/Debug
في الخدمة إذا كانت لك أسئلة أو إستفسارات طبعا بقدر ما أعلم
أشكر جميع الأخوة الذين شاركو في هذا الموضوع
سبب هذا السؤال هو أنني أجرب عملية Decompilation على برامج فيجوال بيسك و البرنامج الذي استخدمه يعطي تعليمات أسمبلي أريد استخدامها في برنامج سي شارب
أعتقد أن هذا أجاب على سؤالي شكرا ثانية لكم جميعا
هذا هو موقع البرنامج :
و أرجو من الله إعانتي و إعانتكم على فعل الخير
بالمناسبة أنا مبرمج فيجوال بيسك 6 متقدم فإذا أردتم أية مساعدة فأنا جاهز
في البداية يسخرون منك . . . ثم يهملونك . . . ثم يحاربونك . . . ثم تنتصر
شكراً Ben_Laiid
ولكن كيف ذلك بدون ++Visual C ? اقصد بواسطة المفكرة و ومترجم السي CL
وكيفية كتابة commandline لـ Win32
السلام عليكم
هذه المراحل اللازمة:
1.
2.
3. هذا الكود الذي يضاف تلقائيا
الآن أضف الكود السابق الذي وضعته كمثال في آخر الكود الذي يضيفه الفيزوال تلقائيا ثم أنقر F6. ستتم الترجمة بنجاح وستجد المكتبة MyDLL في المجلد Bin/Debugالتابع لمشروعك
الآن أنسخ تلك المكتبة في المجلدC:\WINNT\system32 أو دC:\windows\system32لحاسوبك (حسب نظام التشغيل الذي تمتلكه)
4.
الآن أنشأ مشروع جديد وأضف المجال:
using System.Runtime.InteropServices;
هذا المجال يهتم أساسا بالتصرف في إستدعاء المكتبات الخارجية
5. إستدعي مكتبتك والدالة التي عرفتها فيها كما يلي:
[DllImport("MyDLL.dll")]
public static extern int getCPUSpeed();6. وهكذا تحصل على مخرجات الدالة التي وضعت فيها التعليمات بلغة الآلة:
MessageBox.Show(getCPUSpeed().ToString());
من الأفضل التأكد جيد من عمل الدوال التي عرفتها في المكتبة عبر تجربتها في مشروع سي من نوعConsole Application ثم تقم "بتعليبها" في المكتبة dll
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…