Hi, I have a question, first time in this community BTW. So I want to know how I can execute, load or open a file, or call a file withing a parent process. I'm not sure what terms I'm supposed to use, so please excuse me if I sound confusing. But if anyone can direct me to finding more on how to do something similar to that, I'd appreciate it
Thanks
Hi Mike,
There are many ways to do that from assembler. What exactly do you need it for?
Mike, tell us bit more of what you are trying to do, it will give us some idea of how to respond to your question.
I'm was trying to figure out how I could execute a program from the cmd line. I learned a little more on how to do that which is to use CREATE PROCESS which requres windows.inc, or masm32rt.inc but I now have linker error from executing it. I think it has to do with with my framework.c file because it executes correctly without it. I looked up the errors 2019 and 2001. It says either my _MainPROC doesn't exist or is duplicated somewhere else. However I my header needs framework.c to create a message box. If you have a work around I'd appreciate it
see attached files
This will build, I annotated what the changes were.
.686p
.mmx
.xmm
.MODEL FLAT, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;;; INCLUDE io.h
.DATA
PrcName db 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',0
CmdLine db '/k "echo.&&'
db 'echo Recover - Recover C:&&'
db 'echo Wiz [?] - MBRWizard&&'
db 'echo Exit - Reboot"',0
.DATA?
SUInfo STARTUPINFO <>
PrcInfo PROCESS_INFORMATION <>
.CODE
start: ; <<<<<<<<<< You need a start label
_main proc
INVOKE CreateProcess,ADDR PrcName,ADDR CmdLine,NULL, NULL,NULL,
NORMAL_PRIORITY_CLASS,NULL,NULL,ADDR SUInfo,ADDR PrcInfo
INVOKE ExitProcess,0
_main endp
end start ; <<<<<<<<<< terminate the same label as the start label
I have tested it and it runs the version of Google Chrome on my computer. God know what you are trying to do with the command line but you can get it to start a valid URL.
Ok, just ran your code, and it didn't help, but it does run. However it only runs without framework.c.
Which is the current problem
So basically, it will run with framework.c if windows.inc isn't included, but then I won't be able to run the cmdline. So if I remove framework.c, it will run but then the user won't be able to input or output strings.
I'm using the cmdline to output images, if executed inconditional statements. I'd figure that it would be the easier option, but taking the easy way out doesn't seem to be working. So maybe, there's a better way to display images without a command prompt... I currently don't know
Please see attachment
Quote from: Mike Anum on May 08, 2017, 06:01:06 AMSo if I remove framework.c, it will run but then the user won't be able to input or output strings.
You don't need any "framework.c" to input or output strings. There are many alternatives, e.g. crt_printf() and crt_scanf():
include \masm32\include\masm32rt.inc
.data?
buffer db 1000 dup(?)
.code
start:
mov edi, offset buffer
invoke crt_printf, chr$("Type a string: ")
invoke crt_scanf, chr$("%s"), edi
invoke crt_printf, chr$("You typed %s"), edi
invoke crt__getch
exit
end start
Btw, the best thing about Visual Crap is that you can disinstall it fairly easily 8)
It compiles, but how do you add a message box to it? Help please
I don't know, maybe MsgBox 0, "Hello World", "I am a title:", MB_OK ? What does the manual say?
If found a solution, I just edited my framework.c file to added a function with create process which then ran an exe containing an executable that opens an image from memory. I then edited my io.h headerhe file to executed the c function
Thanks everyone for the help, Cheers : :biggrin: