Dec 16

Безумната комбинация CreateToolhelp32Snapshot + TH32CS_SNAPTHREAD

CreateToolhelp32Snapshot е основна функция що се отнася до изброяване на процеси, модули, нишки и heap-ове. В MSDN тя е дефинирана така:

HANDLE WINAPI CreateToolhelp32Snapshot(
  __in  DWORD dwFlags,
  __in  DWORD th32ProcessID
);

Най-просто казано първият параметър указва каква информация ще се изисква, а вторият – процесът, за който се отнася въпросната информация.

Нека за момент си представим, че искате да получите списък с нишките, които принадлежат на даден процес. Необходимият флаг е TH32CS_SNAPTHREAD. По инерция въвеждате и идентификатора на процеса, който Ви интересува. Изпълнявате и ХОП – ИЗНЕНАДА! Сдобивате се със списък на всички активни в операционната система нишки (до които имате достъп), а не за конкретната програма?!?

Continue reading

Sep 26

Вирус поразява инсталации на Delphi?!?

Едва ли има потребител, който не знае що е то компютърен вирус (като потърпевш или обеззаразител 🙂 ). Но поведението на вируса, за който ще стане дума е доста нестандартно. Открит е съвсем случайно, поради БЪГ внего 🙂

Историята.

Преди време, в руски Delphi форум е зададен въпрос, относно неочаквана грешка по време на изпълнение на някаква програма: Runtime Error 3. В последствие става ясно, че в компилираната програма има скрит изпълним код:

[singlepic=177,210]

Изследването му води до следния извод: вирусът НЕ ЗАРАЗЯВА изпълними файлове, а самия Delphi компилатор! И прави само това – разпространява се т.е. не извършва деструктивни операции и може да се смята, чее “безвреден”. Ето и част от неговия код:

[singlepic=178,210]

В Интернет вирусът е познат под името W32/Induc-A.

Вирус, поразяващпрограмисти 😀

Continue reading

Sep 13

Delphi: изброени типове (enumerations)

Delphi,като много други програмни езици, предлага на потребителя да дефинира т.нар. изброени типове (enumerations). Те представляват поредица от именувани елементи/константи, чиято стойност се определя от поредното място на елемента в списъка. Изброените типове спадат към т.нар. подредени данни. Те дефинират подредено множество от стойности, където всяка стойност, без първата има уникален предшественик и всяка стойност, без последната, има уникален следващ елемент.

В Delphi има вградени такива типове: integer,char,boolean

Ето и един пример:

Type TSedmica=(tsPonedelnik, tsVtornik, tsSriada, tsChetvyrtyk, tsPetyk, tsSybota, tsNedelia);

Continue reading

Sep 05

Полезно ли е преписването от Интернет? :)

Преди 2-3 години ми се наложи да напиша програма, която стартира друго приложение в кода си. Логично, попитах google 🙂 . Намерих това, което ми трябва. Даже си го отделих в unit, който съдържа често използвани процедури и фунцкии. До тук добре.
Малко след това трябваше да се направи нишково приложение (Multi Threaded Аpplication), което да стартирапо 30външни приложения едновременно и постоянно – като цяло интензивнен процес. Направих необходимото и пуснах програмата в действие. За лоша моя изненада тулчето ми зависваше след няколко дни работа и състоянието на компютъра, на който се изпълняваше беше трагично: “Low Of System Resources”… Очевадно беше, че някъде съм забравил да освободя памет т.е. т.нар. Memory Leak (изтичане на памет). Прекарах доста време пред не чак толкова сложната си програма, но не постигнах никакъв положителен ефект – на пръв поглед всичко беше ОК. Последваха интензивни тестове, които показаха, че приложението ми яде памет…но къде?!?
Continue reading

Sep 04

Спомняте ли си Turbo Pascal и Turbo C/C++?

Преди години това бяха два продукта, които промениха начина, по който се програмира. Голямата новост беше, че те предлагат интегрирана среда за програмиране (IDE), макар и в текстов режим. Години след това имената им се промениха, бяха мигрирани към графичен интерфейс, IDE частта им ставаше все по-добра и лесна за употреба. Цената им обаче – твърде висока за повечето потребители.

Добрата новина е, че някои от големите компании, които се занимават с разработката на IDE и компилатори предоставят и по-орязани версии на своите продукти на цена $0 т.е. безплатно. Въпреки намалената си функционалност те са изключително подходящи за изучаване на различните програмни езици в училищата (часовете по информатика/ИТ).

Continue reading