الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

assembly & c++ language

مغلق
بدأه عدي في 7 يناير 2006 · 6 رد · 1,110 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخوتي

السلام عليكم ورحمة الله وبركاته

في الحقيقة ارجو ممن لديه اي معلومات عن كيفية برمجة الاسمبلي عن طريق لغة سي بلص بلص ان يتكرم بها علي سواء كتاب او روابط لمواقع

جزاكم الله خيرا

#2

السلام عليكم

السؤال غير واضح اخى عدى, ماذا تقصد ببرمجة الاسمبلى عن طريق السى بلس بلس؟؟

هل تقصد إستخدام inline assembly إذا كان الامر كذلك فما عليك سوى وضع كلمة asm_ قبل وبعد شفرة الاسمبلي حتى يتمكن المترجم من التميز بين شفرة الاسمبلى وشفرة السى او السى بلس بلس..

اما إذا كان الامر غير ذلك فالرجاء التوضيح...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

تقصد شئ كهاذا ؟

اقتباس
Qnix dev # cat > dsmsg.c

#include <stdio.h>

char dsmsg[] = "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x05\xcd"\

              "\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe2\xff\xff\xff\x51\x6e\x69\x78\x0a";

int main(int argc, char **argv)

{

  int (*func)();

  func = (int (*)()) dsmsg;

  (int)(*func)();

}

Qnix dev # gcc dsmsg.c -o dsmsg

Qnix dev # ./dsmsg

Qnix

ال asm كود لل dsmsg[] هو

اقتباس
Qnix dev # cat dsmsg.asm

[sECTION .text]

global _start

_start:

        jmp short ender

        starter:

        xor eax, eax

        xor ebx, ebx

        xor edx, edx

        xor ecx, ecx

        mov al, 4

        mov bl, 1

        pop ecx

        mov dl, 5

        int 0x80

        xor eax, eax

        mov al, 1

        xor ebx,ebx

        int 0x80

        ender:

        call starter

        db 'Qnix',0xa

لتحويله الى shellcode قم بتجميعه

اقتباس
Qnix dev # nasm -f elf dsmsg.asm -o dsmsg.o

Qnix dev # ld dsmsg.o -o dsmsgbin

بعدها قم بستعمال objdump لتقوم ب disasm

اقتباس
Qnix dev # objdump -d dsmsgbin

dsmsgbin:    file format elf32-i386

Disassembly of section .text:

080480a0 <_start>:

80480a0:      eb 19                  jmp    80480bb <ender>

080480a2 <starter>:

80480a2:      31 c0                  xor    %eax,%eax

80480a4:      31 db                  xor    %ebx,%ebx

80480a6:      31 d2                  xor    %edx,%edx

80480a8:      31 c9                  xor    %ecx,%ecx

80480aa:      b0 04                  mov    $0x4,%al

80480ac:      b3 01                  mov    $0x1,%bl

80480ae:      59                      pop    %ecx

80480af:      b2 05                  mov    $0x5,%dl

80480b1:      cd 80                  int    $0x80

80480b3:      31 c0                  xor    %eax,%eax

80480b5:      b0 01                  mov    $0x1,%al

80480b7:      31 db                  xor    %ebx,%ebx

80480b9:      cd 80                  int    $0x80

080480bb <ender>:

80480bb:      e8 e2 ff ff ff          call  80480a2 <starter>

80480c0:      51                      push  %ecx

80480c1:      6e                      outsb  %ds:(%esi),(%dx)

80480c2:      69                      .byte 0x69

80480c3:      78 0a                  js    80480cf <ender+0x14>

الان شوف ال bold هي ال bytes الي نحتاجها .. الان لو كنت تبغا تشغل هاذا الملف عن طريق ملف C رتب الشيلكود

ويكون الترتيب بلعكس ...

وفي النهايه راح يصير

char dsmsg[] = "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x05\xcd"\
               "\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe2\xff\xff\xff\x51\x6e\x69\x78\x0a";

هاذا في ليونكس اما في ويندوز نفس الطريقه لكن استعمل ادوات اخرى مثل ollydbg او اي شئ اّخر ...

تم تعديل هذه المشاركة بواسطة Qnix في 8 يناير 2006 في 12:48

#4

اخوتي المحترمين

اقصد انه لغة سي بلص بلص تحتوي على

asm_ لكي تبدا بتقبل لغة الاسمبلي والبرمجة بها .. وارجو ممن لديه ايه معلومات عن كيفية البرمجة بلغة الاسمبلي من داخل لغة سي بلص بلص ان يتحفنا بها وجزاكم الله خيرا

asm_

mov al , dl

الخ .....

#5

انا مبرمج سي ولا اعرف ماذا يفعل هذا الكود احس انه غامض ؟!!!

{
  int (*func)();
  func = (int (*)()) dsmsg;
  (int)(*func)();
}

وش معنى () وداخلها int ونجمة ووش معنى مرة ثانية كتبت الـint بين قوسين هل فيه موضوع يشرح هذا الغموض وبالتفصيل الممل ؟!!

طبعا اعرف وش معنى pointer لكن الكود هذا خلاني اصير غامض فياليت تفهمني وش معناه ووش كل سطر يعني وابي بالتفصيل ؟؟؟

#6
Sub-0 كتب:
انا مبرمج سي ولا اعرف ماذا يفعل هذا الكود احس انه غامض ؟!!!

{
  int (*func)();
  func = (int (*)()) dsmsg;
  (int)(*func)();
}

1 تعرف مؤشر دالة

2 تجعل المتغير السابق يؤشر على الدالة dsmsg

3 تنفذ الدالة

ليس لي في C لأن حبيبي Pascal :lol:

d4baa0.gif
#7

الباسكال مااحبها لغة للتعليم اكثر من انها تستخدم في تطبيقاات عدة لكن Delphi والي تعتبر visual pascal اعتبرها قوية جدا ولغة مصنعة لبرامج في كافة المجالات وخاصة برامج backdoor/trojans

هذا الموضوع مغلق.

مواضيع مشابهة