PDA

Просмотр полной версии : Элементарные основы кодинга


NeXArmAor
13.10.2007, 09:52
Нид хелп,сейчас мучаю одно творение,и возникла одна "маленькая проблема",дело в том что при использовании функции lstrcat возникает некоторые лаги,эта функция соединяет два буфера в один,но происходит мерзостная бага когда ее используеш часто. Т.е допустим нужно соединить C:\WINDOWS с regedit.exe. На первый раз все клеит удачно,но потом возникает необходимость еще одного комбинирования,типа dir с C:\WINDOWS\regedit.exe и тут повляется своеобразный мусор,типа "dir C:\WINDOW\regedit.exe :7: 444353" откуда берутся эти символы не понятно. В чем проблема? Сорри,если вопрос ламо...реально надо понять в чем проблема. Надо как то очищать буфер?

Ky3bMu4
13.10.2007, 13:20
1)На конце regedit.exe поставь мой любимый разделитель("_") , а потом начиная с конца конца закидай буффер нулями.
2)Сначала "склей" dir и C:\\... , а потом regedit.exe
3)Юзай wsprintf . Это найлучший и надёжнейший метод.

NeXArmAor
13.10.2007, 13:37
Ky3bMu4,thx...примерчик подкинь с wsprintf плз. Если знаеш

Ky3bMu4
13.10.2007, 13:55
Примерно так:

....................
.const
xz db '%s%s',0
st1 db 'dir',0
st2 db 'C:\\',0
...................
.code
Main PROC
LOCAL st3:BYTE ; склееная строка будет здесь
invoke wsprintf , st3 , xz , st1 , st2
.....................

Ni0x
13.10.2007, 14:24
Ky3bMu4, автограф дашь? Честное слово, таких мастеров еще не видел. Особенно понравился твой код. Верх программерского мышления! Он наверное outpost обходит, путем вызова исключения, я угадал?
NeXArmAor, msdn говорит чтонибудь? Прочитал бы для начала про lstrcat, там вроде ясно написано, что строка должна закнчиваться '\0', но читать справку не модно, понимаю.


LPTSTR lstrcat(
LPTSTR lpString1,
LPTSTR lpString2
);

Parameters
lpString1
[in, out] Pointer to a null-terminated string. The buffer must be large enough to contain both strings.
lpString2
[in] Pointer to the null-terminated string to be appended to the string specified in the lpString1 parameter.

С wsprintf таже ситуация, ну конечно тебе нужен пример, ведь без примера ты ничего не поймешь. Если я не ошибаюсь, ты автор N-Joiner Asm Version, тогда вопрос, у кого ты украл исходники, если не знаешь таких элементарных вещей?

NeXArmAor
13.10.2007, 14:31
NiOx, не остри плз. Я автор N-Joy и я не крал исходники ни у кого. А на счет справки ты прав,я ее не читал. Ну я конечно понимаю,ты гуру ассемблера,для тебя все элементарно,но уж извини не дошел я до такого ранга еще.

Ni0x
13.10.2007, 14:52
Начнем с того, что я не считаю себя гуру ассемблера и насчет ранга я не понял. Какое отношение lstrcat имеет к ассемблеру? То что ты не знаешь банальных вещей про нулевой символ и при этом пишешь джоинер - это нонсенс я считаю. Удачи.

NeXArmAor
13.10.2007, 14:57
NiOx, а для того чтобы написать джойнер совсем не обязательно знать про нулевой символ.

inv
13.10.2007, 15:04
Ni0x да ладно тебе)я видел похлеще....))))
Большинство здесь решают какие-то определенные задачи ,они не изучают язык...но это опять же их право,а то что после написания джойнера они не стесняются задавать такие вопросы...ну хз.

_Great_
13.10.2007, 18:33
NiOx, а для того чтобы написать джойнер совсем не обязательно знать про нулевой символ.
Ну да, вероятно для того, чтобы написать ОС, совсем не обязательно знать устройство компьютера и процессора в частности. Достаточно лишь покидать понтов, натырить у всех кода и скзать - смотрите, какой я крутой, я написал это сам!

1)На конце regedit.exe поставь мой любимый разделитель("_") , а потом начиная с конца конца закидай буффер нулями.
2)Сначала "склей" dir и C:\\... , а потом regedit.exe
3)Юзай wsprintf . Это найлучший и надёжнейший метод.
Со своим любимым разделителем и такими советами знаешь куда тебе надо?

GoreMaster
13.10.2007, 18:45
1)На конце regedit.exe поставь мой любимый разделитель("_") , а потом начиная с конца конца закидай буффер нулями.
код разделителя 5Fh, что равно POP edi
На первый раз все клеит удачно,но потом возникает необходимость еще одного комбинирования,типа dir с C:\WINDOWS\regedit.exe и тут повляется своеобразный мусор,типа "dir C:\WINDOW\regedit.exe :7: 444353" откуда берутся эти символы не понятно.
Стек восстанавливай
push ebp
mov ebp, esp
invoke lstrcat
mov esp, ebp
pop ebp

wsprintf тоже стек не восстанавливает после себя
PathCombineW (c) MSDN

_Great_
13.10.2007, 18:48
Товарищам Ky3bMu4 и NeXArmAor стоит прочитать про конвенции вызова.
Второму еще и про ASCIIZ строки

NeXArmAor
14.10.2007, 09:01
_Great_,NiOx
Для чего этот топик создан? Наверно,для того чтобы новичкам и не только отвечали на подобные вопросы(пусть они МЕГА-ЛАМЕРСКИЕ),а не обсирали их,типа "вот ты лже кодер,ты не знаеш даже элементарных вещей типа нулевого символа". И я НЕ КРАЛ сорцы при создании джойнеров и не хвалился ЧТО Я КРУТОЙ КОДЕР.Все должны с чего-то начинать,нереально тупо взять с своей головы какую-нибудь хрень и написать что-нибудь не посмотрев на сорцы какого-нибудь приложения или не зная как замутить какую-нибудь функцию. А то что я умудрился написать джойнер,не зная таких "элементарных вещей" ни чего сверхестественного из себя не представляет. У всех разный стиль программирования.

_Great_
14.10.2007, 13:37
А то что я умудрился написать джойнер,не зная таких "элементарных вещей" ни чего сверхестественного из себя не представляет.
представляет. ну тема даже не о том

Ну так иди и читай про нулевой символ и будешь знать) Тебе даже подсказали, в чем, вероятно, проблема. Какие проблемы то=)

NeXArmAor
14.10.2007, 14:01
представляет. ну тема даже не о том

Ну так иди и читай про нулевой символ и будешь знать) Тебе даже подсказали, в чем, вероятно, проблема. Какие проблемы то=)
Сейчас уже нет проблем,я решил ее как посоветовал кузьмич,использованием wsprintf. Я даже после его поста отписал что все работает(значит ВСЕ,значит вопрос исчерпан). И тут появился ниокс,и пошло,поехало. "Элементарные вещи","как можно было написать джойнер не зная элементарных вещей" и т.д

DWORD
14.10.2007, 20:55
Т.к. написание "джоинера" занятие совершенно бестолковое с практической точки зрения, то можно сделать вывод, что ты получаешь в его процессе какие-то для себя навыки в написании кода, вполне логично будет указать на незнание элементарных вещей, без которых люди обычно даже не начинают писать программы, а пребывают только в стадии изучения начального необходимого для этого материала.

Кстати нулевой символ не имеет к ассемблеу никакого отошения, ровно как не имеет смысла написание windows программ на ассемблере, т.к. они всеравно сводятся к вызову winapi функций (которые и на ассемблере чаще всего заменяются макросами) и описанию алгоритмов, которые намного прозрачнее выглядят в структурном виде. К тому же хороший компилятор, врядли сгенерирует менее продуктивный код из хорошего алгоритма чем тот, что будет написан вручную.

Piflit
14.10.2007, 20:59
написание "джоинера" занятие совершенно бестолковое с практической точки зрения
а какое занятие толковое? написание дров для кернел мода? или шеллкодирование сплойтов? объясни, будь так добр.

DWORD
14.10.2007, 21:05
- дурак...а дальше я промолчу
И я промолчу.
а какое занятие толковое? написание дров для кернел мода? или шеллкодирование сплойтов? объясни, будь так добр.
Я устал от того что мои сообщения на этом форуме постоянно удаляют, поэтому не буду разводить тут оффтопик, чтобы не удалили еще и это, а жаль что не вышло ответить.

_Great_
14.10.2007, 21:22
Вижу, тема выливается в отдельное обсуждение. Разделяю тему.

По новой теме -

Т.к. написание "джоинера" занятие совершенно бестолковое с практической точки зрения, то можно сделать вывод, что ты получаешь в его процессе какие-то для себя навыки в написании кода, вполне логично будет указать на незнание элементарных вещей, без которых люди обычно даже не начинают писать программы, а пребывают только в стадии изучения начального необходимого для этого материала.

Кстати нулевой символ не имеет к ассемблеу никакого отошения, ровно как не имеет смысла написание windows программ на ассемблере, т.к. они всеравно сводятся к вызову winapi функций (которые и на ассемблере чаще всего заменяются макросами) и описанию алгоритмов, которые намного прозрачнее выглядят в структурном виде. К тому же хороший компилятор, врядли сгенерирует менее продуктивный код из хорошего алгоритма чем тот, что будет написан вручную.
во многом я согласен. нонесколько поправок - ассемблер иногда действительно нужен. но эти случаи гораздо более редки, чем об этом думают прирожденные фанаты асма.
действительно глупо писать все подряд на нем - компилятор и в самом деле сгенерирует код не хуже, а во многих случаях и лучше самопального кода наших доморощенных "гуру".

а какое занятие толковое? написание дров для кернел мода? или шеллкодирование сплойтов? объясни, будь так добр.
позволь, я.
Во-первых, объясни, пожалуйста, по каким критериям ты считаешь написание очередного джойнера, тем более автором, который нихрена (а это видно) не знает системного программирования, не знает про нулевые символы и прочую дребедень, коих (джойнером, в прочем равно как и авторов) в интернете полным полно.
Во-вторых, мне очень интересна причина твоих язвительных высказываний. Прокомментируй, будь добр.

И я промолчу.

Я устал от того что мои сообщения на этом форуме постоянно удаляют, поэтому не буду разводить тут оффтопик, чтобы не удалили еще и это, а жаль что не вышло ответить.
Не беспокойся, дельные посты не удаляют. Конкретно эту тему я удалять не буду, мало того, сам поучаствую в обсуждении, принимая твою сторону ввиду того, что много уж слишком развелось кулхацкеров недоделанных.
Если хотят научиться - ну так пускай учатся. "Хочешь жить по человечески - ну так живи!" (С) к/ф "Ночной Дозор"
Но зачем выпендриваться с релизом своих джойнеров и прочей хренотени. Понимаю, конечно, что это круто и все такое, да, вон там кузьмич пишет про разделитель из подчеркивания - это же офигенно круто!
А незадумывался ли товарищ кузьмич, что символ _ мало того, что может использоваться в тексте, так еще и в коде, являясь опкодом инструкции POP EDI.
А не задумывался ли автор "джойнера", что без знаний и нулевом байте, ASCIIZ строках и о MSDN писать джойнер это жесть? Нет?!

Ky3bMu4
14.10.2007, 21:42
Если хотят научиться - ну так пускай учатся. "Хочешь жить по человечески - ну так живи!" (С) к/ф "Ночной Дозор"

Ну так почему просто не указать человеку его ошибки?Без всеких выкрутасов типа: "ну это п****ц конечно".

P.S.
Имхо: тему в болталку.

_Great_
14.10.2007, 21:46
Ну так почему просто не указать человеку его ошибки?Без всеких выкрутасов типа: "ну это п****ц конечно".

P.S.
Имхо: тему в болталку.
Указали. Тебе тоже указали. Ты продолжаешь жечь

Piflit
14.10.2007, 21:56
_Great_
Во-первых, объясни, пожалуйста, по каким критериям ты считаешь написание очередного джойнера...
Не понял вопрос, если он был в этой фразе.
Во-вторых, мне очень интересна причина твоих язвительных высказываний. Прокомментируй, будь добр.
DWORD говорит, что "написание "джоинера" занятие совершенно бестолковое с практической точки зрения". А что тогда является толковым с практической точки зрения? Он так и не ответил. Я считаю, что написание джойнера - полезное занятие, которое развивает навыки программиста и кодера. Согласись, это не калькулятор написать. Может для кого-то это и уже давно пройденный этап, ну а для кого-то нет.

_Great_
14.10.2007, 22:07
_Great_

Не понял вопрос, если он был в этой фразе.

ПРопустил слово. Еще раз, почему ты считаешь написание джойнера толковым?

Он так и не ответил. Я считаю, что написание джойнера - полезное занятие, которое развивает навыки программиста и кодера. Согласись, это не калькулятор написать. Может для кого-то это и уже давно пройденный этап, ну а для кого-то нет. С познаниями на уровне плинтуса - это бред.
Это тоже самое, что учить шестиклашек щелкать диффуры. Полезно, безусловно, а зачем? Было бы неплохо промежуточные знания получить

MegaDeth
14.10.2007, 22:09
соединяй строки побайтно, если известны длинны значений.
незнай на чем ты кодиш но я бы сделал так:
берем первый байт по адресу буфер2 и перемещаем в конец буфер1 (
но учитывай нуль, который и обрывает строку, его нада переписать) , потом на сл. смещение, и так до конца,(пока все из буфер1 е переместим) потом установить там нуль "терминатор" :D

[адрес буфер2 +1]) перемещаем в [адрес буфер1+длинна_его+1]
mov byte ptr [адрес буфер1+длинна_его+1], byte ptr [адрес буфер2 +1]
где 1- смещение... нужное...

и так в цикле, делая постоянное смещение пока не зак. длина второго буфера. закончилась - суем нуль в конец первого буфера...
далее по адрему буфер1 будет буфер1+буфер2...

Piflit
14.10.2007, 22:14
Еще раз, почему ты считаешь написание джойнера толковым?
Да в принципе написание любой проги толково, если в процессе ее написания человек узнает что-то новое. А ты считаешь написание джойнера нетолковым? Если да, то почему? =\
Было бы неплохо промежуточные знания получить
А если на получение промежуточных знаний нет времени (как у меня), а хочется что-то написать just 4 fun? Причем для моего фана, а не фана других. В любом случае, часть (ок, пускай не все, но в любом случае) этих промежуточных знаний будет получена в процессе.

GlOFF
14.10.2007, 22:26
Какой кипишь поднялся из-за элементарного вопроса и как всегда дошло до филосовствований :)

Даже самый тупой метод и тупая методика при упорстве и настойчивости приводит к успеху, достижении конечной цели.

_Great_
14.10.2007, 22:33
Да в принципе написание любой проги толково, если в процессе ее написания человек узнает что-то новое. А ты считаешь написание джойнера нетолковым? Если да, то почему? =\

А если на получение промежуточных знаний нет времени (как у меня), а хочется что-то написать just 4 fun? Причем для моего фана, а не фана других. В любом случае, часть (ок, пускай не все, но в любом случае) этих промежуточных знаний будет получена в процессе.
1) Да. Почему? Почему я описал выше.

2) "Да пишите вы куда хотите" (С)
пожалста, давай сразу пиши операционку. Не вопрос

Ni0x
14.10.2007, 22:49
Пора и мне отписаться.

Ну так почему просто не указать человеку его ошибки?Без всеких выкрутасов типа: "ну это п****ц конечно".

Видишь ли, ты изначально выбрал проигрышную тактику. Помню твое первое сообщение, которое я увидел на вхб - это банальный вопрос новичка, сразу видно, что ты в процессе изучения. И тут, спустя небольшое количество времени, начинаешь релизить разного рода лоадеры, трояны, одей методы обхода оутпоста и прочее. Причем все что ты "писал" - это умное копирование чужих исходников с новыми именами переменных и парой новых функций, после твоих статей с легендарным "_" всем окончательно стало понятно, что ты на самом деле ничерта не знаешь, зато представлений о себе высоких, раз продаешь "свои" творения.


Я считаю, что написание джойнера - полезное занятие, которое развивает навыки программиста и кодера.

Как по мне, написание того же джойнера может лишь укрепить знания, но никак не добавить их, ибо получаешь ты знания из тех же доков по PE формату допустим. Навыки ты этим занятием никак не разовьешь, если конечно тебе не прийдется думать в процессе написания о том, как лучше составить алгоритм, написать ту или иную часть кода, прийти к новому решению в конце концов. Я очень сомневаюсь, что ТС в процессе разработки думал о чем то вышеописанном. Больше того, я уверен, что это очередной "джоинер", который писался по аналогии с еще одным "недетским" исходником, недостатка в которых в последнее время не наблюдается. Следовательно, программист того же джоинера у меня ассоциируется с человеком, понимающим почему lstrcat никак не склеет два буфера нормально..

Piflit
14.10.2007, 22:52
"Да пишите вы куда хотите" (С)
пожалста, давай сразу пиши операционку. Не вопрос
как-то незаметно для себя я стал твоим оппонентом в этой теме =\\
я согласен, что не надо писать что-то сложное, не зная простых основ. не буду с тобой дальше спорить. все.


Как по мне, написание того же джойнера может лишь укрепить знания, но никак не добавить их, ибо получаешь ты знания из тех же доков по PE формату допустим. Навыки ты этим занятием никак не разовьешь, если конечно тебе не прийдется думать в процессе написания о том, как лучше составить алгоритм, написать ту или иную часть кода, прийти к новому решению в конце концов. Я очень сомневаюсь, что ТС в процессе разработки думал о чем то вышеописанном.
ТС не думал, а я думал. Все просто.
ЗЫ просто ты на мой пост отвечал, и я тоже отвечаю на твой. =)

GoreMaster
14.10.2007, 23:01
Ппц...по идеи половину раздела программирования на данном разделе можно отправить на баш =)
Не знает про нул байт,хрен с ним, пусть использует метод кузьмича и смотрит как зеродей трой вылетает с эксепшеном, я бы с удовольствием на такое посмотрел...
Да,кузьмич не знает кодинга как такого,только на уровне примтивов, вспомним М. Фленова, чем не кузьмич, правда тот еще умудряется печататься и получать деньги за книжки =\
Вы тут спорите, про то как ндао кодить...а народ релизит всякую херню.а ради чего, прально ради плюсиков...
Уберите эту ахинею с плюсиками и будет все ок...народ хоть думтаь начнет

MegaDeth
14.10.2007, 23:08
Уберите эту ахинею с плюсиками и будет все ок...народ хоть думтаь начнет
не вижу связи :\

Delimiter
14.10.2007, 23:22
считаю что любой вправе спрашивать а любой по мере возможности отвечать, это никак не означает что отвечать должны ГУРУ.... гораздо более бессмысленными выглядят возмущения "просвещенных" .... у вас было право молчать, но вы выбрали понты.... Обьяснить по поводу нулевого символа мог любой 10-класник знакомый с Си... неужели внимание ГУРУ затронуло то что человек с такими знаниями сумел написать Джойнер??? А большинство туттошних хакеров не переделывают R57 пхп-шный код с внутренним чуством , вот наконец они и стали программерами? Так что поблагодарим ламера, что он идет вперед....

DWORD
14.10.2007, 23:25
какое занятие толковое? написание дров для кернел мода? или шеллкодирование сплойтов? объясни, будь так добр.
Толковое занятие - то, которое приносит пользу людям или твоему кошельку. Разумеется написание эксплоитов (а тем более "шеллкодов") не приносит пользы людям, в действительности далеко это занятие и от кошелька, следовательно оно бестолковое и годится лишь только как вредительское хобби.

Написание драйверов дело не только интересное но повсеместно востребованное, может приносить как пользу людям, так и пользу кошельку, кроме того доставлять удовольствие и являться невредительским хобби.

Помимо этого существует еще множество интересных занятий, перечислять их будет глупо, т.к. их очень много, но все же пару примеров приведу: программирование своего 3D движка и моделирование физических процессов на его основе ну и еще много чего вплоть до программирование микроконтроллеров и сборки своих собственных электронных схем, да мало ли что, почему обязательно интересности должны быть хакерскими? Столько есть всяких интересностей, которые абсолютно legitimus.

Вы тут спорите, про то как ндао кодить...а народ релизит всякую херню.а ради чего, прально ради плюсиков...
Уберите эту ахинею с плюсиками и будет все ок...народ хоть думтаь начнет
По моему опыту переписки личными сообщениями оказывается что "плюсики" это очень большой стимул "активности" форумчан, так что администрация форума конечно же на это не пойдет, у них "оттуда" свой совсем иной взгляд на все что здесь происходит.