16 / 16 / 0
Регистрация: 13.11.2009
Сообщений: 69
1
FASM

Вызываю dll (написанную на vc++2008) из Fasm. Через 40 секунд вылет из программы.Без вызова dll из Fasm программа не вылетает.

16.03.2011, 19:35. Показов 2361. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа на vc++2008:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "MathFuncsDll.h"
 
#include <stdexcept>
 
using namespace std;
 
namespace MathFuncs
{
    double MyMathFuncs::Add(double a, double b)
    {
        return 0;
    }
}
В Fasm-е:
invoke MyFunc,0,0
и в цикле пока не нажмем ESCAPE.
Точно знаю что библиотека подключается и вызываеться(делал в vc++2008 dll MessageBox). Вызов из Fasm выводит этот MessageBox.
Если не делаю в Fasme invoke MyFunc,0,0 то нет вылетов.

Добавлено через 2 минуты
Может ли переполняться стек. И из-за этого вылетает. Смотрел Debugerom когда вызываеться invoke MyFunc,0,0 то esp уменьшаеться на 8 (так как делаеться 2 push при вызове invoke ).И так каждый раз после вызова esp становиться меньше на 8.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2011, 19:35
Ответы с готовыми решениями:

Fasm dll
Как в fasm создать dll файл?

Пишем DLL на FASM'e
Всё описанное здесь - это личное видение, если не оговорено обратное. Если вас мучает вопрос:...

передача параметров dll fasm
Если у кого есть пример дайте плз. Проблема такая: как передать параметры в длл на фасме и из нее в...

Как воспроизводить dll-файлы и код их чтения на отладчике xdbg? (FASM)
Как воспроизводить dll-файлы и их чтение на отладчике xdbg? (FASM)

1
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
17.03.2011, 11:13 2
ronniko, во первых ты вызываешь функцию с соглашением вызова __cdecl, соответственно стек должен чистить вручную, либо использовать cinvoke вместо invoke (или лучше ccall)
Во вторых ты не верно передаешь параметры в функцию. Так как у тебя отсутствует тело функции то ты не заметишь разницы, но если появится, то будет ошибка.
Цитата Сообщение от ronniko Посмотреть сообщение
invoke MyFunc,0,0
ты передаешь таким образом тока первый параметр, т.к. double 8 байт.
Вот код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
format PE GUI 4.0
entry start
 
include 'include\win32a.inc'
 
section '.text' code readable executable
start:
    invoke  GetModuleHandle,0
 
    sub esp, 8
    fld qword [b]
    fstp    qword [esp]
    sub esp, 8
    fld qword [a]
    fstp    qword [esp]
    call    myadd
    add esp, 16
 
    invoke  ExitProcess, 0
 
proc myadd c, a:qword, b:qword
fld qword [a]
fadd qword [b]
ret
endp
 
section '.data' data readable writeable
 
a dq 2.0
b dq 3.0
 
section '.idata' import data readable writeable
 
library kernel32,'KERNEL32.DLL',\
      user32,'USER32.DLL'
 
include 'include\api\kernel32.inc'
include 'include\api\user32.inc'
попробуй заменить в нем функцию myadd своей импортируемой, должно работать

Добавлено через 1 час 22 минуты
можно проще
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
;   sub esp, 8
;   fld qword [b]
;   fstp    qword [esp]
;   sub esp, 8
;   fld qword [a]
;   fstp    qword [esp]
    push    dword [b+4]
    push    dword [b]
    push    dword [a+4]
    push    dword [a]
    call    myadd
    add esp, 16
1
17.03.2011, 11:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2011, 11:13
Помогаю со студенческими работами здесь

Обсуждение статьи "Пишем DLL на FASM'e"
R71MT, на сам знаешь каком сайте в разделе ARTICLES моя статья &quot;Import x64&quot;, посмотри, может...

Как подключить dll, написанную на C, к dll на Delphi
Добрый день! Нужно подключить dll написанную на C к dll на Delphi. Как это можно сделать и можно ли...

Visual Basic вылетает с ошибкой при попытке вызова функции из DLL
Declare Function testdll Lib &quot;cfg.dll&quot; () As String Private Sub Form_Load() Me.Caption =...

Можно ли из ASP как-то вызвать dll, чтобы результат её (dll) работы вставился в место вызова?
Можно ли из ASP как-то вызвать dll, чтобы результат её (dll) работы вставился в место вызова?...

Вызываю функцию из dll, программа "падает"
Здравствуйте. Имеется dll написанная на с++ (исходного кода нет), в которой есть функция ...

Слетели библиотеки .dll При запуске любых приложений на компьютере вылетает ошибка с расширением .dll
Не запускается приложения на windows 8. А также удалились точки доступа Восстановления Системы и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru