Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Определение папки в которой лежит прога, на FASM


Автор: fAL 27.1.2005, 15:13
Дайте пожалуйсто исходничек маленькой программки выдающий ввиде MessageBox'а адрес папки из которой она запущена ("C:\..."), и еще если можно исходничек(уже другой жалательно, а то я не разберусь) маленькой програмки передающий чего либо в командную строку (типа формат це smile ).... Язык fasm, формат exe
Не судите строго, я новичек smile
smile

Автор: Akina 27.1.2005, 15:27
Под Виндой? под ДОСом?

И нахрена дубли плодить?

Автор: fAL[SCHOOL] 28.1.2005, 17:15
Цитата(Akina @ 27.1.2005, 15:27)
Под Виндой? под ДОСом?

И нахрена дубли плодить?

Под Винду эстественно, а дубли для того что-бы больше народу прочитало

Автор: Chingachguk 30.1.2005, 02:22
Код

.386
.model flat,stdcall
option casemap :none  ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

[b]include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib[/b]

...

.data?
lpCmdLine     dd ?
.code

 invoke GetCommandLine
 mov lpCmdLine,eax       ; address command line

.data
MsgCaption db 'MsgBox',0
.code

 invoke MessageBox,NULL,lpCmdLine,addr MsgCaption,MB_OK

Автор: fAL 30.1.2005, 23:56
Чингачгук, спасибо за ответ, но я новичек и поэтому врядли смогу перевести это дело с masm на fasm smile

Автор: Chingachguk 31.1.2005, 00:05
Гм. Ну дай мне пример простой программы на fasm - чтобы я врубился в синтаксис

Автор: Guest 31.1.2005, 11:48
Цитата(Chingachguk @ 31.1.2005, 00:05)
Гм. Ну дай мне пример простой программы на fasm - чтобы я врубился в синтаксис

Вот в одном туториале нашел:

КОД:
; с этого символа начинается строка комментариев :-)
format PE GUI 4.0 ;сообщаем компилятору, что хотим создать GUI-приложение под windows,
;ведь фасм может работать под разными платформами
;*****************************************
entry start ;указываем точку входа, т. е. с какой метки начинает выполняться программа
;*****************************************
include 'c:\fasm\include\win32a.inc' ;подключаем файл, который будет определять вызов WinАРI-функций
; Вместо «c:\fasm» пропишите свой путь к папке с фасмом
;*****************************************
section '.data' data readable writeable ;секция данных
;в данном случае мы инициализируем две строки, оканчивающиеся нулевым символом,
;Все строки должны оканчиваться нулём, почему?.. А догадайтесь сами :-)
message db 'fasm - это круто',0
caption db 'Типа название',0
;*****************************************
section '.code' code readable executable ; здесь будет наш код
start: ;точка входа, не забыли что эт такое?..
;вызываем виндошную функцию, выводящую MessageBox
invoke MessageBox,NULL,message,caption,MB_OK
;завершаем работу программы
invoke ExitProcess,NULL
;*****************************************
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',user,'USER32.DLL'
import kernel,ExitProcess,'ExitProcess'
import user,MessageBox,'MessageBoxA'
;*****************************************

Автор: oleg1973 1.2.2005, 11:59
Код

include '%fasminc%/win32ax.inc'

.code
start:
       invoke GetCurrentDirectory,512,buff
       invoke MessageBox,0,buff,buff,0
       invoke ExitProcess,0
buff:
       times 512 db 0
.end start                                      

упростим немнога код smile


и вот чуть не забыл насчет командной строки,
там еще проще , делаем invoke GetCommandLine
получаем указатель на asciz строку вида "C:\test.exe parametr"
в случае если наш файл лежал в корне диска С и звался тест.ехе
ну и сам parametr если он конешно был передан файлу

Автор: fAL[SCHOOL] 1.2.2005, 13:30
Цитата(oleg1973 @ 1.2.2005, 11:59)
Код

include '%fasminc%/win32ax.inc'

.code
start:
       invoke GetCurrentDirectory,512,buff
       invoke MessageBox,0,buff,buff,0
       invoke ExitProcess,0
buff:
       times 512 db 0
.end start                                      

упростим немнога код smile


и вот чуть не забыл насчет командной строки,
там еще проще , делаем invoke GetCommandLine
получаем указатель на asciz строку вида "C:\test.exe parametr"
в случае если наш файл лежал в корне диска С и звался тест.ехе
ну и сам parametr если он конешно был передан файлу

Получил следующий код
Код

format PE GUI 4.0
entry start

include 'D:\assembler\INCLUDE\win32a.inc'
include 'D:\assembler\INCLUDE\win32ax.inc'


section '.code' code readable executable start:

      invoke GetCurrentDirectory,512,buff
      invoke MessageBox,0,buff,buff,0
      invoke ExitProcess,0

buff:
      times 512 db 0


section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',user,'USER32.DLL'
import kernel,ExitProcess,'ExitProcess'
import user,MessageBox,'MessageBoxA'
                                                               


Но этот код не работает,
говорит что ошибка в 68 строке файла stdcall.inc в фразе "purge rstargs#first@args"


Автор: oleg1973 1.2.2005, 18:11
Код

format PE GUI 4.0
entry start
include 'c:\fasm\INCLUDE\win32a.inc'
section '.code' code readable executable
start:
     invoke MessageBox,0,buff,buff,0
     invoke ExitProcess,0
buff:
     times 512 db 0


section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
       user,'USER32.DLL'

import kernel,\
      ExitProcess,'ExitProcess'
import user,\
      MessageBox,'MessageBoxA'


я сморю ленивый ты smile)))
а GetCurrentDirectory сам подумай как прикрутить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)