kurt said:
right, because truth has such a 'democratic' nature...
Well, it's really language that is democratic. If you use words in the
manner of Humpty Dumpty, communication failures are guaranteed. Humpty
Dumpty was in error; the meaning of a word arises from consensus - it
means what most well-informed people think it means, at any particular
time, and not what Humpty Dumpty chooses for it to mean.
but for the sake of argument lets say that data qualifies a software
- can data qualify as malware? how can something that is entirely
passive be malicious? 'malicious software' fairly reasonably implies
active software (ie. of the *program* variety)...
Wrong. We were recently informed of a security alert involving malicious
images, that can cause a buffer-overflow in Internet Explorer. That is
an example of malicious data. And there is a trivial attack on IE that
involves the use of a HTML tag of the form
<FRAME name="AAAAAAAAAAAAAAAAAAAAAAAA">
to cause a buffer overflow. Neither of these examples can be malicious
from your perspective, so no doubt you won't be protecting the computers
for which you are responsible against either of them.
It's characteristic of general-purpose computers that what is stored in
main memory can be treated *either* as data *or* as code. Hence the
possibility of self-modifying code. And that's assuming that the code in
question is machine code; suppose instead that the 'code' is p-code, or
Java bytecode? Then you have code that can't be directly executed;
instead another program has to read and process the 'code', and perform
different operations depending on what sequences of values the 'code'
contains. Such intermediate 'code' is in fact data that is input to a
program.
So p-code and bytecode are now exposed as data, despite being the result
of running a compiler on program source-code. And even machine-code
contains data declarations, a stack area and so on; not all of a
machine-code program is actually machine-code.
When you run an assembler against an assembly-language program, the
assembler generates machine-code, which it treats as data (it doesn't,
for example, try to execute it). So even raw machine-code is sometimes
code, and sometimes data.
Most modern CPUs directly execute microcode; even the machine-code is
effectively data to be processed when viewed from the perspective of the
microcode engine.