Всем привет.
Вот наткнулся на проблемку) надеюсь тут мне раздуплят)
есть необходимость писать кучу разных ДЛЛ для основного проекта.
основное требование написание на С++ со вставками АСМ кода.
в итоге должна получатся структура на подобии этой (тупо рандомный пример, показать как по стандарту должно быть)
Код:
#include "stdafx.h"
int Calc(int *mas,int imax,int jmax,int j)
{
int res, step=4,source,teg;
_asm{
finit
mov eax,0
mov eax,j
dec eax
mul step
mov esi,eax
mov eax,0
mov eax,jmax
mul step
mov source,eax
mov eax,0
mov ebx,mas
add ebx,esi
mov ecx,imax
label: mov eax,[ebx]
mov teg,ecx
mov ecx,0
mov ecx,7h
div ecx
cmp edx, 0
jz yes
jmp post
yes: inc res
post: add ebx,source
mov edx,0
mov ecx,teg
loop label
}
return res;
}
теперь самое сладенькое
асм я не шарю а длл все равно нужно писать)
что я делаю
пишу длл на С++ и потом дезасемблирую.
вот пример кода либы на С++
Код:
#include "stdafx.h"
#include <conio.h>
int calc (int *mas, int m)
{
int min=mas[0];
for (int i=1;i<m;i++)
if (min>mas[i]) min=mas[i];
return min;
}
Код:
LIBRARY "MyDll"
DESCRIPTION 'This library has one function'
EXPORTS
calc @1
после скормления IDA получили подобие либы на асме, но ясен пень нерабочее)
вот оно
Код:
#include "stdafx.h"
#include <conio.h>
int calc (int *mas, int m)
{
_asm{
//=====================================================
; int __cdecl calc(int *, int)
public ?calc@@YAHPAHH@Z
?calc@@YAHPAHH@Z proc near
arg_0= dword ptr 4
arg_4= dword ptr 8
mov ecx, [esp+arg_0]
mov eax, [ecx]
xor edx, edx
inc edx
cmp [esp+arg_4], edx
jle short locret_10001021
push esi
loc_10001010:
mov esi, [ecx+edx*4]
cmp eax, esi
jle short loc_10001019
mov eax, esi
loc_10001019:
inc edx
cmp edx, [esp+4+arg_4]
jl short loc_10001010
pop esi
locret_10001021:
retn
?calc@@YAHPAHH@Z endp
//====================================================
}
}
вот пацаны опишите кто шарит плиз как мне умудрится делать либы с помощью рабочих либ на С++ и IDA ?
Заранее очень благодарен)