Угадай что!???

12
anser06
На сайте с 11.03.2006
Offline
292
#11

Показал задачку брату-программеру. Вот его ответ.

dobrosyn:
Вот написал программу на Assembler. И вот думаю знает ли ктото здесь этот язык программирования. Но здесь есть 1 ошибка. Какая?

Начнем по порядку..

.model flat, STDCALL

если так нравится masm то почему же не использовать invoke? иначе STDCALL не нужен

extrn ExitProcess : proc

extrn MessageBoxA : proc

extrn GetComputerNameA : proc

зачем заниматься объявлением процедур которые уже объявлены?

buflen dd 256

указывать нужно 255, т.к. строка входит в конце с нулевым символом, а то может быть переполнение буфера, а это баг..

push 40h

не нужно так писать, а то у людей возникают подозрения в правильности кода ;), чем не нагляднее (MB_OK or MB_ICONINFORMATION)?

ну и вообще код нужно объявлять как процедуру..

вообщем имеем, тот же самый код:

////////////////////////////////

.386

.model flat, stdcall

include windows.inc

include user32.inc

include kernel32.inc

includelib user32.lib

includelib kernel32.lib

.data

buflen dd 255

hello_title db " title ", 0

hello_message db "Computer Name: "

user_name db 256 dup (0)

.code

main proc

invoke GetComputerName, addr user_name, addr buflen

invoke MessageBox, 0,addr hello_message, addr hello_title, MB_OK or MB_ICONINFORMATION

invoke ExitProcess, 0

main endp

end main

////////////////////////////////

Удачи!

Derek
На сайте с 23.09.2005
Offline
70
#12

про переполнение буфера я в самом начале сказал, оветили - мимо :-)

так что вероятно в коде уже 2 бага :-))

(.)(.) или ( Y ) ? (http://www.realderek.ru/) : как заработать 20 миллионов долларов США за 2 года (http://www.realderek.ru/2010/04/20-millions-za-2-goda.html)
dobrosyn
На сайте с 04.02.2007
Offline
160
#13
anser06:

вообщем имеем, тот же самый код:
////////////////////////////////
.386
.model flat, stdcall

include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

.data
buflen dd 255
hello_title db " title ", 0
hello_message db "Computer Name: "
user_name db 256 dup (0)

.code

main proc
invoke GetComputerName, addr user_name, addr buflen
invoke MessageBox, 0,addr hello_message, addr hello_title, MB_OK or MB_ICONINFORMATION
invoke ExitProcess, 0
main endp

end main
////////////////////////////////

ай яй яй!!! :) :) ошибка проще некуда.....а вы не знаете? это что то 😂 😂 😂

Продвижение сайтов в сложных тематиках (https://luxsite.ua/seo/)
Derek
На сайте с 23.09.2005
Offline
70
#14

[потер. ошибся]

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий