WinAsm Studio, The Assembly IDE - Free Downloads, Source Code
Sponsors
Articles
Programming Quick Start
32-bit Assembler is Easy
Porting Iczelion tutorials
What is FASM
Hard Drive Recovery
Wiring your own LAN
Personal menu
Welcome Guest
User:
Pass:
Register!
Resend Validation Email
 
Forum
 

ru: Avoid prologue and epilogue in procedure, when you create an EXE-Linker shnik MASM all calls to CALL and INVOKE makes it the standard way

DenStroev
Quote Post


New Member
*

Group: Members
Posts: 1
Member No.: 37921
Joined: 17-September 10


При создании EXE-шника компоновщик MASM во всех вызовах как CALL так и INVOKE делает им стандартный выход:
leave
ret 04
Причём при вызове DLL входную часть прописывает:
push esp
mov ebp,esp
///////////// - код
leave
ret 04
А при вызове локального SUBа не прописывает. Идёт глюк по стёку.
Вопрос: Как заставить MASM линковать только то, что я написал, без вышеуказанных входов и выходов CALLов.
PMEmail PosterIntegrity Messenger IMICQAOLYahooMSN
Top
shoorick
Quote Post


Extremely Active Member
******

Group: Admins
Posts: 2301
Member No.: 160
Joined: 22-June 04


"вход" и "выход" добавляются не вызовам "call" и "invoke", а самим процедурам. это "фрейм" процедуры, он создается для доступа к параметрам и локальным переменным процедуры, находящимся в стеке, относительно ebp. если используется stdcall, то вызываемая процедура должна их удалять. судя по "ret 4" процедура имеет по крайней мере один параметр. может быть, если у процедуры не будет параметров и локальных переменных, фрейм не добавится. есть еще и другие способы вызова, о них можно узнать, почитав calling conventions.

Возможно, у МАСМа есть какие-то опции, но процедуры можно писать и без обрамления в "proc/endp", а к параметрам обращаться относительно esp, однако здесь нужно следить за состоянием esp, который меняется после каждого push/pop:
CODE
my_proc:
   ...
   mov eax,[esp+n*4]; n - номер параметра, начиная с единицы
   ...
   ret (n*4); n - число параметров в стеке

конечно же, такая процедура не появится в списке процедур в WinAsm Studio.
PMEmail PosterUsers Website
Top
Jupiter
Quote Post


Extremely Active Member
******

Group: Moderators
Posts: 732
Member No.: 773
Joined: 10-November 04


Для того, чтобы процедура не имела пролога/эпилога:
CODE
option prologue:none
option epilogue:none


Установка стандартных пролога/эпилога для процедуры:
CODE
option prologue:prologuedef
option epilogue:epiloguedef
PMEmail Poster
Top
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

Topic Options Reply to this topicStart new topicStart Poll

 

Sponsors
Computer Science

Internet
C/C++
Hardware & PC maintenance

HiEditor

General Discussions
Suggestions/Bug Reports
WinAsm Studio

General Discussions
Suggestions/Bug Reports
WinAsm Studio FAQ
Multilingual User Interface
Add-Ins
Assembly Programming

Main
Newbies
Projects
Custom Controls
Snippets
Announcements & Rules

Announcements

General

Online Degrees - Distance Learning
The Heap
Russian
Google