ウィルス作成に使われていた未知のプログラム言語はCだった、だがしかし
Soumenkov 氏によれば、Duqu フレームワークは C 言語で書かれており、MSVC 2008でオプション「/O1」と「/Ob1」を付与してコンパイルされていたという。また同氏は、未知のコードとされていた部分は、「OO C」と呼ばれるオブジェクト指向 C 言語の一種で書かれているようだ、とも発表している。
http://japan.internet.com/webtech/20120322/4.html
一見、Cでかかれてたのかなぁンだとか思うところではありますが、"OO C"ってのがかなり気になるわけです。
どう見ても Object-Oriented C の略でありますが、そのまんま過ぎて、そんなプログラミング言語聞いたことないわけです。
でぐぐっとしてみたわけですが、それっぽいのはこれでしょうか。
ooc is an object-oriented programming language which is implemented with a source-to-source translator to pure C99. It supports classes, abstract functions, foreach, ranges, etc. It intends to be modern, modular, extensible, yet simple and fast.
ooc programming language
プログラム例がないのでちょっとわからないのですが、他のオブジェクト指向Cとは違うような雰囲気の説明ぶりであります。
追記:現在アクティブなページっぽいところ
ooc is a modern, self-hosting, object-oriented, functional-ish, high-level, low-level sexy programming language, starring closures, interfaces, enums, garbage collection.. It strives to be powerful, modular, extensible, portable, yet simple and fast.
The main implementation ooc is rock, a self-hosting compiler which translates ooc sources to C source code, and then use a C compiler to produce an executable.
Programming with ooc - Wikibooks, open books for an open world
んーでもリンク切れがありますね。
シンタックスはこんな感じ。
http://docs.ooc-lang.org/language/syntax.html
例
Diving into OOC, a fun new programming language | Ralree
んーたしかにオブジェクト指向。
以下oocの例のコピペ。長いので。
include stdlib // Need for rand() and srand() include time // Need for time() c_rand: extern(rand) func -> Int c_srand: extern(srand) func(seed: Int) -> Int c_time: extern(time) func(when: Int) -> Int import structs/ArrayList //operator as (b: Boo) -> Int Boat: abstract class { name: String status: Int // I'd like this to be an enum, but oh well // a horn sound. Needs to be implemented by children horn: abstract func crash: abstract func } // a new class of boat Failboat: class extends Boat { init: func (=name) { this status = 3 } init: func ~withStatus (=name, =status){} horn: func { printf("SS %s blares his horn: FAIL, %u!\n", this name, this status) } crash: func { if(!status) return status -= 1 match status { case 0 => printf("%s sinks!\n", name) case 1 => printf("%s starts leaking!\n", name) case => printf("%s is unharmed!\n", name) } } } // Crash the boats together. // This will test their strength based on status // Return value will be -1 if u wins, 0 for continuation, // 1 if v wins, and 2 if both destroy eachother operator + (u,v: Boat) -> Int { printf("Kapow! %s and %s crash into eachother!\n", u name, v name) [u,v] as ArrayList<Boat> each(Boat crash) printf("%s: %d, %s: %d\n", u name, u status, v name, v status) return match { case(u status + v status == 0) => 2 case(u status == 0) => 1 case(v status == 0) => -1 case => 0 } } main: func { // Seed rand like we usually do in C c_srand(c_time(null)) boat_a := Failboat new("Godzilla", c_rand() % 4) boat_b := Failboat new("Megalon", c_rand() % 4) // DANGER AHEAD! SOUND THE HORNS! [boat_a, boat_b] as ArrayList<Boat> each(Boat horn) // Fight fight fight! status := 0 while(!status) { status = boat_a + boat_b } // Determine the victor printf("The Battle is over. ") match status { case 2 => "Both Boats are destroyed!" println() case 1 => printf("%s is the victor", boat_b name) case -1 => printf("%s is the victor", boat_a name) } }
よりオブジェクト指向言語っぽくてシンプルそうにも見えますね。