نمایش نتایج 1 تا 4 از 4

نام تاپیک: چگونگی استفاده از توابع API در Assembly

  1. #1

    Question چگونگی استفاده از توابع API در Assembly

    سلام

    اگه میشه یه کد از استفاده از توابع API در Assembly بزنید ( با توضیح )

    با تشکر
    Woeful

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    ایران
    سن
    32
    پست
    110

    نقل قول: چگونگی استفاده از توابع API در Assembly

    سلام من نمی دونم چه نوع توابع Api رو می خواهی لینک کنی اما می دونم با یک برنامه WinAsm می توانی این کار را انجام دهی و برای استفاده از تواب در برنامه باید انها را Include کنی یعتی این که زمانی که تابع فراخوانی می شود توسط این لینک به کتابخانه رجوع می کند و تابع را فراخوانی می کند و نحوه استفاده از اون هم در برنامه به صورت زیر هست به Include ها نگاه کن در کجا به کار برده شده است.


    و در کد برنامه که باید توابعی رو که می خواهی بنویسی که اینجوری است اول با Satart: شروع می کنی توابع را فراخوانی می کنی و در پایان End start رو می نویسی.

  3. #3

    Arrow نقل قول: چگونگی استفاده از توابع API در Assembly

    نقل قول نوشته شده توسط امید خطیبی مشاهده تاپیک
    سلام من نمی دونم چه نوع توابع Api رو می خواهی لینک کنی اما می دونم با یک برنامه WinAsm می توانی این کار را انجام دهی و برای استفاده از تواب در برنامه باید انها را Include کنی یعتی این که زمانی که تابع فراخوانی می شود توسط این لینک به کتابخانه رجوع می کند و تابع را فراخوانی می کند و نحوه استفاده از اون هم در برنامه به صورت زیر هست به Include ها نگاه کن در کجا به کار برده شده است.


    و در کد برنامه که باید توابعی رو که می خواهی بنویسی که اینجوری است اول با Satart: شروع می کنی توابع را فراخوانی می کنی و در پایان End start رو می نویسی.
    سلام آقا خیلی ممنون از اینکه جواب دادین اما...

    ولی این عکسی که شما گزاشتین مال یه سایت دگس که اینجا کپی شده (این سایتو قبلا دیدم)


    سلام من نمی دونم چه نوع توابع Api رو می خواهی لینک کنی
    فرض کن من از kernel32.dll تابع WinExec رو میخوام فراخوانی کنم

    می دونم با یک برنامه WinAsm می توانی این کار را انجام دهی
    من فک میکنم WinAsm یک IDE ساده برای راحت تر کردن کاره و به توابع API مربوط نیست

    و در کد برنامه که باید توابعی رو که می خواهی بنویسی که اینجوری است اول با Satart: شروع می کنی توابع را فراخوانی می کنی و در پایان End start رو می نویسی.

    این به توابع API ربطی نداره :Start فقط یه Lable و End Start هم در همه کد های Assebmly هست


    اگه میشه لطفا در این عکسی که گزاشتین خطوط 3،5،6،14 رو یه توضیح به من بدین


    بازم ممنون (جدی میگم )

  4. #4

    نقل قول: چگونگی استفاده از توابع API در Assembly

    دوست عزیز همانطور که می دونی توابع API توابعی هستند که در غالب DLL ها ، در حافظه توسط سیستم عامل Load می شوند تا سایر برنامه های کاربردی از این توابع استفاده کنند !
    برای استفاده از این توابع در هر برنامه ای ، صرف نظر از زبان برنامه نویسی و حتی محیط کاریش ، باید به کامپایلر بفهمانی که می خوای از فلان تابعی که در بهمان کتابخانه (DLL) قرار گرفته استفاده کنی تا کامپایلر در زمان کامپایل بتونه اون تابع رو به برنامت Link کنه ! و سپس بعد از این کار خیلی راحت می تونی تابع مورده نظرت رو در برنامت احضار کنی .
    در مورده سوال شما هم مسئله به همین گونه است که عرض کردم ، یعنی در اسمبلی ابتدا باید DLL مورده نظر رو با استفاده از دایرکتیو INCLUDELIB اعلان کنی و سپس داخل سگمنت کدت اون رو احضار کنی . باید به این دو نکته هم اشاره کنم که ارسال پارامترها به توابع با استفاده از Stack انجام می پذیره ، لذا برای احضار تابعی که مثلا دو پارامتر داره باید ابتدا آن دو رو با استفاده از دستور PUSH داخل Stack قرار بدی و سپس تابعت رو فرا بخوانی ! ( در MASM دایرکتیوی به نام invoke وجود دارد ، که احضار توابع را ساده کرده است و دیگر نیازی به این PUSH کردن ها نیست ! ) و نکته ی دوم اینکه مقدار برگشتی توابع در رجیستر EAX قرار می گیره !
    برای مثال در زیر دستورات برنامه ای رو قرار می دهم که با استفاده از تابع MessageBoxA که در کتابخانه user32 قرار گرفته ، پیغامی رو نمایش می ده !


    .486
    .model flat,stdcall ; Flat memory model
    MB_OK equ 0 ; Constant

    EXTERN ExitProcess@4:NEAR ; Prototype of the external procedure
    EXTERN MessageBoxA@16:NEAR ; Prototype of the external procedure

    includelib ...\lib\user32.lib ; Directives for the linker to link libraries
    includelib ...\lib\kernel32.lib

    .data
    msgtex db "Hello World ...",0
    msgc db "Message !",0

    .code
    Start:

    PUSH MB_OK
    PUSH OFFSET msgc
    PUSH OFFSET msgtex
    PUSH 0
    CALL MessageBoxA@16

    PUSH 0
    CALL ExitProcess@4

    END Start


    موفق باشی ...

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •