1993 honda accord dash disassembly
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 534
The bastard disassembler 0.17
The bastard disassembler is a disassembler for linux/unix platforms. more>>
The bastard disassembler is a disassembler written for x86 ELF targets on Linux. Other file formats/CPUs can be plugged in. It has a command-line interface and is meant to be used as a backend or engine. Support for controlling the disassembler via pipes is provided. Note that this disassembler does not rely on libopcodes to do its disassembly. Rather, the libi386 plugin is a standard .so that can be reused by other projects.
This interpreter can be used interactively, it can be fed commands via STDIN [just like a scripting interpreter], and it can be communicated with via a pair of FIFOs. Now, on top of this any number of UI front ends can be stacked -- ncurses console front ends, Gtk X front-ends, Tk front ends, etc. It is the reponsibility of the front-ends to display the information obtained by querying the disassembler, supplying syntax highlighting, displaying strings, xrefs, etc; however the disassembler will retain all of this information, do all of the brute processing, and will provide any of the information when requested.
<<lessThis interpreter can be used interactively, it can be fed commands via STDIN [just like a scripting interpreter], and it can be communicated with via a pair of FIFOs. Now, on top of this any number of UI front ends can be stacked -- ncurses console front ends, Gtk X front-ends, Tk front ends, etc. It is the reponsibility of the front-ends to display the information obtained by querying the disassembler, supplying syntax highlighting, displaying strings, xrefs, etc; however the disassembler will retain all of this information, do all of the brute processing, and will provide any of the information when requested.
Download (2.35MB)
Added: 2005-01-27 License: Artistic License Price:
1736 downloads
Perl x86 Disassembler 0.16
Perl x86 Disassembler is an Intel x86 disassembler written in Perl. more>>
The libdisasm library provides basic disassembly of Intel x86 instructions from a binary stream. The intent is to provide an easy to use disassembler which can be called from any application; the disassembly can be produced in AT&T syntax and Intel syntax, as well as in an intermediate format which includes detailed instruction and operand type information.
This disassembler is derived from libi386.so in the bastard project; as such it is x86 specific and will not be expanded to include other CPU architectures. Releases for libdisasm are generated automatically alongside releases of the bastard; it is not a standalone project, though it is a standalone library.
The recent spate of objdump output analyzers has proven that many of the people [not necessarily programmers] interested in writing disassemblers have little knowledge of, or interest in, C programming; as a result, these "disassemblers" have been written in Perl.
Usage
The basic usage of the library is:
1. initialize the library, using disassemble_init()
2. disassemble stuff, using disassemble_address()
3. un-initialize the library, using disassemble_cleanup
These routines have the following prototypes:
int disassemble_init(int options, int format);
int disassemble_cleanup(void);
int disassemble_address(char *buf, int buf_len, struct instr *i);
Instructions are disassembled to an intermediate format:
struct instr {
char mnemonic[16];
char dest[32];
char src[32];
char aux[32];
int mnemType; /* type of instruction */
int destType; /* type of dest operand */
int srcType; /* type of source operand */
int auxType; /* type of 3rd operand */
int size; /* size of insn in bytes */
};
The sprint_address() can be used in place of the disassemble_address() routine in order to generate a string representation instead of an intermediate one:
int sprint_address(char *str, int len, char *buf, int buf_len);
...so that a simple disassembler can be implemented in C with the following code:
#include
char buf[BUF_SIZE]; /* buffer of bytes to disassemble */
char line[LINE_SIZE]; /* buffer of line to print */
int pos = 0; /* current position in buffer */
int size; /* size of instruction */
disassemble_init(0, INTEL_SYNTAX);
while ( pos > BUF_SIZE ) {
/* disassemble address to buffer */
size = sprint_address(buf + pos, BUF_SIZE - pos, line, LINE_SIZE);
if (size) {
/* print instruction */
printf("%08X: %sn", pos, line);
pos += size;
} else {
printf("%08X: Invalid instructionn");
pos++;
}
}
disassemble_cleanup();
Alternatively, one can print the address manually using the intermediate format:
#include
char buf[BUF_SIZE]; /* buffer of bytes to disassemble */
int pos = 0; /* current position in buffer */
int size; /* size of instruction */
struct instr i; /* representation of the code instruction */
disassemble_init(0, INTEL_SYNTAX);
while ( pos > BUF_SIZE ) {
disassemble_address(buf + pos, BUF_SIZE - pos, &i);
if (size) {
/* print address and mnemonic */
printf("%08X: %s", pos, i.mnemonic);
/* print operands */
if ( i.destType ) {
printf("t%s", i.dest);
if ( i.srcType ) {
printf(", %s", i.src);
if ( i.auxType ) {
printf(", %s", i.aux);
}
}
}
printf("n");
pos += size;
} else {
/* invalid/unrecognized instruction */
pos++;
}
}
disassemble_cleanup();
This is the recommended usage of libdisasm: the instruction type and operand type fields allow analyzing of the disassembled instruction, and can provide cues for xref generation, syntax hi-lighting, and control flow tracking.
<<lessThis disassembler is derived from libi386.so in the bastard project; as such it is x86 specific and will not be expanded to include other CPU architectures. Releases for libdisasm are generated automatically alongside releases of the bastard; it is not a standalone project, though it is a standalone library.
The recent spate of objdump output analyzers has proven that many of the people [not necessarily programmers] interested in writing disassemblers have little knowledge of, or interest in, C programming; as a result, these "disassemblers" have been written in Perl.
Usage
The basic usage of the library is:
1. initialize the library, using disassemble_init()
2. disassemble stuff, using disassemble_address()
3. un-initialize the library, using disassemble_cleanup
These routines have the following prototypes:
int disassemble_init(int options, int format);
int disassemble_cleanup(void);
int disassemble_address(char *buf, int buf_len, struct instr *i);
Instructions are disassembled to an intermediate format:
struct instr {
char mnemonic[16];
char dest[32];
char src[32];
char aux[32];
int mnemType; /* type of instruction */
int destType; /* type of dest operand */
int srcType; /* type of source operand */
int auxType; /* type of 3rd operand */
int size; /* size of insn in bytes */
};
The sprint_address() can be used in place of the disassemble_address() routine in order to generate a string representation instead of an intermediate one:
int sprint_address(char *str, int len, char *buf, int buf_len);
...so that a simple disassembler can be implemented in C with the following code:
#include
char buf[BUF_SIZE]; /* buffer of bytes to disassemble */
char line[LINE_SIZE]; /* buffer of line to print */
int pos = 0; /* current position in buffer */
int size; /* size of instruction */
disassemble_init(0, INTEL_SYNTAX);
while ( pos > BUF_SIZE ) {
/* disassemble address to buffer */
size = sprint_address(buf + pos, BUF_SIZE - pos, line, LINE_SIZE);
if (size) {
/* print instruction */
printf("%08X: %sn", pos, line);
pos += size;
} else {
printf("%08X: Invalid instructionn");
pos++;
}
}
disassemble_cleanup();
Alternatively, one can print the address manually using the intermediate format:
#include
char buf[BUF_SIZE]; /* buffer of bytes to disassemble */
int pos = 0; /* current position in buffer */
int size; /* size of instruction */
struct instr i; /* representation of the code instruction */
disassemble_init(0, INTEL_SYNTAX);
while ( pos > BUF_SIZE ) {
disassemble_address(buf + pos, BUF_SIZE - pos, &i);
if (size) {
/* print address and mnemonic */
printf("%08X: %s", pos, i.mnemonic);
/* print operands */
if ( i.destType ) {
printf("t%s", i.dest);
if ( i.srcType ) {
printf(", %s", i.src);
if ( i.auxType ) {
printf(", %s", i.aux);
}
}
}
printf("n");
pos += size;
} else {
/* invalid/unrecognized instruction */
pos++;
}
}
disassemble_cleanup();
This is the recommended usage of libdisasm: the instruction type and operand type fields allow analyzing of the disassembled instruction, and can provide cues for xref generation, syntax hi-lighting, and control flow tracking.
Download (0.038MB)
Added: 2005-03-07 License: Artistic License Price:
1701 downloads
DSP5600x disassembly library 1.1
DSP5600x disassembly library is a code disassembly library for the Motorola DSP5600x. more>>
lib5600x is a library implementing Motorola DSP5600x disassembler. Its an ANSI C link library that should be useful for people writing debuggers, memory monitors etc for DSP5600x chips.
Usage
1. First you call two initialization functions in the library. This step is mandatory:
make_masks();
make_masks2();
You pass nothing and check for no results -- these functions are guaranteed to succeed.
2. Now you have to allocate memory for a structure that will be used for passing data to/from the library. You may do that on the stack
struct disasm_data dis, *d = &dis;
Yes, the pointer will be useful, too. The disasm_data structure is defined in 5600x_disasm.h file. Lets take a closer look:
#define LINE_SIZE 256
struct disasm_data
{
unsigned char *memory;
char line_buf[LINE_SIZE];
char *line_ptr;
char words;
};
First member -- "memory" -- should point to the opcode you want disassembled. IMPORTANT! The library expects it to be a 24-bit word, so if your assembler creates 32-bit words, youll have to make a simple conversion. Take a look at test.c to see how it is done. Whats more, the library may wish to evaluate two words at a time, so you have to account for that -- this is also demonstrated in the example source.
3. After properly setting up disasm_data struct (i.e. "memory" pointer), you call following function:
int disassemble_opcode(struct disasm_data *);
This function takes pointer to the struct youve just prepared as an argument. When it returns, disasm_data structs "line_buf" member contains the disassembled opcode as a string of ASCII characters. "line_ptr" should be of no interest to you (it is merely a internal variable) and "words" holds the number of 24-bit words you should advance your memory pointer by. This variable is also available as a return value of above function. Again, I
shall refer you to the example source.
4. Repeat step 3 until you run out of code to disassemble.
Testing
First, check out the makefile and make sure it contains proper flags and defines for your architecture. Big endian users should add -DBIGENDIAN to CFLAGS (Id appreciate if someone created Autoconf script to avoid such tricks). Following that, type
make
./test example_dsp_binary
and compare the output (visually) with example.a56 which is a source code I used to create example_dsp_binary and which contains all instructions and addressing modes described in DSP56000/DSP56001 Digital Signal Processor Users Manual. You can also diff your output and supplied example.out file to check if there are any differences (there should be none).
<<lessUsage
1. First you call two initialization functions in the library. This step is mandatory:
make_masks();
make_masks2();
You pass nothing and check for no results -- these functions are guaranteed to succeed.
2. Now you have to allocate memory for a structure that will be used for passing data to/from the library. You may do that on the stack
struct disasm_data dis, *d = &dis;
Yes, the pointer will be useful, too. The disasm_data structure is defined in 5600x_disasm.h file. Lets take a closer look:
#define LINE_SIZE 256
struct disasm_data
{
unsigned char *memory;
char line_buf[LINE_SIZE];
char *line_ptr;
char words;
};
First member -- "memory" -- should point to the opcode you want disassembled. IMPORTANT! The library expects it to be a 24-bit word, so if your assembler creates 32-bit words, youll have to make a simple conversion. Take a look at test.c to see how it is done. Whats more, the library may wish to evaluate two words at a time, so you have to account for that -- this is also demonstrated in the example source.
3. After properly setting up disasm_data struct (i.e. "memory" pointer), you call following function:
int disassemble_opcode(struct disasm_data *);
This function takes pointer to the struct youve just prepared as an argument. When it returns, disasm_data structs "line_buf" member contains the disassembled opcode as a string of ASCII characters. "line_ptr" should be of no interest to you (it is merely a internal variable) and "words" holds the number of 24-bit words you should advance your memory pointer by. This variable is also available as a return value of above function. Again, I
shall refer you to the example source.
4. Repeat step 3 until you run out of code to disassemble.
Testing
First, check out the makefile and make sure it contains proper flags and defines for your architecture. Big endian users should add -DBIGENDIAN to CFLAGS (Id appreciate if someone created Autoconf script to avoid such tricks). Following that, type
make
./test example_dsp_binary
and compare the output (visually) with example.a56 which is a source code I used to create example_dsp_binary and which contains all instructions and addressing modes described in DSP56000/DSP56001 Digital Signal Processor Users Manual. You can also diff your output and supplied example.out file to check if there are any differences (there should be none).
Download (0.012MB)
Added: 2005-03-07 License: BSD License Price:
1693 downloads
libdisassemble
libdisassemble is a Python library that will disassemble X86. more>>
libdisassemble is a Python library that will disassemble X86.
A disassembler is a computer program which translates machine language into assembly language, performing the inverse operation to that of an assembler. A dissasembler differs from a decompiler, which targets a high level language rather than assembly language. Disassembly, the output of a disassembler, is often formatted for human-readability rather than suitability for input to an assembler, making it principly a reverse-engineering tool.
Assembly language source code generally permits the use of symbolic constants and programmer comments. These are usually removed from the final machine code by the assembler. If so, a disassembler operating on the machine code would produce disassembly lacking these constants and comments; the dissassembled output becomes more difficult for a human to interpret than the original annotated source code.
Some disassemblers can infer useful names and comments; however, interactive disassemblers are able to successfully disassemble more programs than fully-automated disassemblers because human insight applied to the disassembly process parallels human creativity in the code writing process.
There can never be a completely automated disassembly tool which always outputs correct source code because the disassembly process reduces to the impossible-to-solve halting problem.
<<lessA disassembler is a computer program which translates machine language into assembly language, performing the inverse operation to that of an assembler. A dissasembler differs from a decompiler, which targets a high level language rather than assembly language. Disassembly, the output of a disassembler, is often formatted for human-readability rather than suitability for input to an assembler, making it principly a reverse-engineering tool.
Assembly language source code generally permits the use of symbolic constants and programmer comments. These are usually removed from the final machine code by the assembler. If so, a disassembler operating on the machine code would produce disassembly lacking these constants and comments; the dissassembled output becomes more difficult for a human to interpret than the original annotated source code.
Some disassemblers can infer useful names and comments; however, interactive disassemblers are able to successfully disassemble more programs than fully-automated disassemblers because human insight applied to the disassembly process parallels human creativity in the code writing process.
There can never be a completely automated disassembly tool which always outputs correct source code because the disassembly process reduces to the impossible-to-solve halting problem.
Download (0.023MB)
Added: 2006-03-10 License: GPL (GNU General Public License) Price:
1325 downloads
The Blowfish cipher
The Blowfish cipher in C and i386 assembler. more>>
The Blowfish cipher in C and i386 assembler.
In cryptography, Blowfish is a keyed, symmetric block cipher, designed in 1993 by Bruce Schneier and included in a large number of cipher suites and encryption products. While no effective cryptanalysis of Blowfish has been found to date, more attention is now given to block ciphers with a larger block size, such as AES or Twofish.
Schneier designed Blowfish as a general-purpose algorithm, intended as a replacement for the aging DES and free of the problems associated with other algorithms. At the time, many other designs were proprietary, encumbered by patents or kept as government secrets. Schneier has stated that, "Blowfish is unpatented, and will remain so in all countries. The algorithm is hereby placed in the public domain, and can be freely used by anyone."
<<lessIn cryptography, Blowfish is a keyed, symmetric block cipher, designed in 1993 by Bruce Schneier and included in a large number of cipher suites and encryption products. While no effective cryptanalysis of Blowfish has been found to date, more attention is now given to block ciphers with a larger block size, such as AES or Twofish.
Schneier designed Blowfish as a general-purpose algorithm, intended as a replacement for the aging DES and free of the problems associated with other algorithms. At the time, many other designs were proprietary, encumbered by patents or kept as government secrets. Schneier has stated that, "Blowfish is unpatented, and will remain so in all countries. The algorithm is hereby placed in the public domain, and can be freely used by anyone."
Download (0.012MB)
Added: 2007-01-25 License: Public Domain Price:
1012 downloads
FallingWords 0.3a
FallingWords is a simple QT game that can help anyone to improve his/her typing skill. more>>
FallingWords is a simple QT game that can help anyone to improve his/her typing skill.
The goal of the game is to type the falling words before they touch the bottom of the screen.
According to the difficulty you choose, words will fall at different speed.
The score is calculated according to the selected skill.
<<lessThe goal of the game is to type the falling words before they touch the bottom of the screen.
According to the difficulty you choose, words will fall at different speed.
The score is calculated according to the selected skill.
Download (3.3MB)
Added: 2006-07-27 License: GPL (GNU General Public License) Price:
1184 downloads
Solving Constraint Integer Programs 0.90
Solving Constraint Integer Programs is a framework for constraint integer programming. more>>
Solving Constraint Integer Programs is a framework for constraint integer programming. For solving Integer Programs and Constraint Programs, a very similar technique is used: the problem is successively divided into smaller subproblems (branching) that are solved recursively.
On the other hand, Integer Programming and Constraint Programming have different strengths: Integer Programming uses LP relaxations and cutting planes to provide strong dual bounds, while Constraint Programming can handle arbitrary (non-linear) constraints and uses propagation to tighten the variables domains.
SCIP is a framework for Constraint Integer Programming oriented towards the needs of Mathematical Programming experts who want to have total control of the solution process and access detailed information down to the guts of the solver. SCIP can also be used as pure MIP solver or as framework for branch-cut-and-price.
Main features:
- It is a framework for branching, cutting, pricing, and propagation.
- It is highly flexible through many possible user plugins:
- constraint handlers to implement arbitrary constraints,
- variable pricers to dynamically create problem variables,
- domain propagators to apply constraint independent propagations on the variables domains,
- cut separators to apply cutting planes on the LP relaxation,
- relaxators to provide relaxations and dual bounds in addition to the LP relaxation,
- primal heuristics to search for feasible solutions with specific support for probing and diving,
- node selectors to guide the search,
- branching rules to split the problem into subproblems,
- presolvers to simplify the solved problem,
- file readers to parse different input file formats,
- event handlers to be informed on specific events, e.g., when a node was solved, a specific variable changed its bounds, or a new primal solution was found,
- display handlers to create additional columns in the solvers output.
- dialog handlers to extend the included command shell.
- Every existing unit is implemented as a plugin, leading to an interface flexible enough to meet the needs of most additional user extensions.
- A dynamic cut pool management is included.
- The user may mix preprocessed and active problem variables in expressions: they are automatically transformed to corresponding active problem variables.
- Arbitrarily many children per node can be created, and the different children can be arbitrarily defined.
- It has an open LP solver support (currently supporting ILOG CPLEX, Dash XPress-MP, SoPlex, and CLP.
- The LP relaxation need not to be solved at every single node (it can even be turned off completely, mimicing a pure constraint solver).
- Additional relaxations (e.g., semidefinite relaxations or Lagrangian relaxations) can be included, working in parallel or interleaved.
- Conflict analysis can be applied to learn from infeasible subproblems.
- Dynamic memory management reduces the number of operation system calls with automatic memory leakage detection in debug mode.
Enhancements:
- The new heuristics "RENS", "mutation", "veclendiving", and "intshifting", were included.
- The existing ones were improved.
- Presolving and c-MIR cut generation were improved.
- A few bugs were fixed.
<<lessOn the other hand, Integer Programming and Constraint Programming have different strengths: Integer Programming uses LP relaxations and cutting planes to provide strong dual bounds, while Constraint Programming can handle arbitrary (non-linear) constraints and uses propagation to tighten the variables domains.
SCIP is a framework for Constraint Integer Programming oriented towards the needs of Mathematical Programming experts who want to have total control of the solution process and access detailed information down to the guts of the solver. SCIP can also be used as pure MIP solver or as framework for branch-cut-and-price.
Main features:
- It is a framework for branching, cutting, pricing, and propagation.
- It is highly flexible through many possible user plugins:
- constraint handlers to implement arbitrary constraints,
- variable pricers to dynamically create problem variables,
- domain propagators to apply constraint independent propagations on the variables domains,
- cut separators to apply cutting planes on the LP relaxation,
- relaxators to provide relaxations and dual bounds in addition to the LP relaxation,
- primal heuristics to search for feasible solutions with specific support for probing and diving,
- node selectors to guide the search,
- branching rules to split the problem into subproblems,
- presolvers to simplify the solved problem,
- file readers to parse different input file formats,
- event handlers to be informed on specific events, e.g., when a node was solved, a specific variable changed its bounds, or a new primal solution was found,
- display handlers to create additional columns in the solvers output.
- dialog handlers to extend the included command shell.
- Every existing unit is implemented as a plugin, leading to an interface flexible enough to meet the needs of most additional user extensions.
- A dynamic cut pool management is included.
- The user may mix preprocessed and active problem variables in expressions: they are automatically transformed to corresponding active problem variables.
- Arbitrarily many children per node can be created, and the different children can be arbitrarily defined.
- It has an open LP solver support (currently supporting ILOG CPLEX, Dash XPress-MP, SoPlex, and CLP.
- The LP relaxation need not to be solved at every single node (it can even be turned off completely, mimicing a pure constraint solver).
- Additional relaxations (e.g., semidefinite relaxations or Lagrangian relaxations) can be included, working in parallel or interleaved.
- Conflict analysis can be applied to learn from infeasible subproblems.
- Dynamic memory management reduces the number of operation system calls with automatic memory leakage detection in debug mode.
Enhancements:
- The new heuristics "RENS", "mutation", "veclendiving", and "intshifting", were included.
- The existing ones were improved.
- Presolving and c-MIR cut generation were improved.
- A few bugs were fixed.
Download (MB)
Added: 2006-09-01 License: Other/Proprietary License Price:
1154 downloads
Algorithm::Numerical::Sample 1.3
Algorithm::Numerical::Sample is a Perl module that can draw samples from a set. more>>
Algorithm::Numerical::Sample is a Perl module that can draw samples from a set.
SYNOPSIS
use Algorithm::Numerical::Sample qw /sample/;
@sample = sample (-set => [1 .. 10000],
-sample_size => 100);
$sampler = Algorithm::Numerical::Sample::Stream -> new;
while () {$sampler -> data ($_)}
$random_line = $sampler -> extract;
This package gives two methods to draw fair, random samples from a set. There is a procedural interface for the case the entire set is known, and an object oriented interface when the a set with unknown size has to be processed.
A: sample (set => ARRAYREF [,sample_size => EXPR])
The sample function takes a set and a sample size as arguments. If the sample size is omitted, a sample of 1 is taken. The keywords set and sample_size may be preceeded with an optional -. The function returns the sample list, or a reference to the sample list, depending on the context.
B: Algorithm::Numerical::Sample::Stream
The class Algorithm::Numerical::Sample::Stream has the following methods:
new
This function returns an object of the Algorithm::Numerical::Sample::Stream class. It will take an optional argument of the form sample_size => EXPR, where EXPR evaluates to the sample size to be taken. If this argument is missing, a sample of size 1 will be taken. The keyword sample_size may be preceeded by an optional dash.
data (LIST)
The method data takes a list of parameters which are elements of the set we are sampling. Any number of arguments can be given.
extract
This method will extract the sample from the object, and reset it to a fresh state, such that a sample of the same size but from a different set, can be taken. extract will return a list in list context, or the first element of the sample in scalar context.
<<lessSYNOPSIS
use Algorithm::Numerical::Sample qw /sample/;
@sample = sample (-set => [1 .. 10000],
-sample_size => 100);
$sampler = Algorithm::Numerical::Sample::Stream -> new;
while () {$sampler -> data ($_)}
$random_line = $sampler -> extract;
This package gives two methods to draw fair, random samples from a set. There is a procedural interface for the case the entire set is known, and an object oriented interface when the a set with unknown size has to be processed.
A: sample (set => ARRAYREF [,sample_size => EXPR])
The sample function takes a set and a sample size as arguments. If the sample size is omitted, a sample of 1 is taken. The keywords set and sample_size may be preceeded with an optional -. The function returns the sample list, or a reference to the sample list, depending on the context.
B: Algorithm::Numerical::Sample::Stream
The class Algorithm::Numerical::Sample::Stream has the following methods:
new
This function returns an object of the Algorithm::Numerical::Sample::Stream class. It will take an optional argument of the form sample_size => EXPR, where EXPR evaluates to the sample size to be taken. If this argument is missing, a sample of size 1 will be taken. The keyword sample_size may be preceeded by an optional dash.
data (LIST)
The method data takes a list of parameters which are elements of the set we are sampling. Any number of arguments can be given.
extract
This method will extract the sample from the object, and reset it to a fresh state, such that a sample of the same size but from a different set, can be taken. extract will return a list in list context, or the first element of the sample in scalar context.
Download (0.004MB)
Added: 2007-05-17 License: Perl Artistic License Price:
894 downloads
Object::AutoAccessor 0.06
Object::AutoAccessor is an accessor class by using AUTOLOAD. more>>
Object::AutoAccessor is an accessor class by using AUTOLOAD.
SYNOPSIS
use Object::AutoAccessor;
my $struct = {
foo => {
bar => {
baz => BUILD OK,
},
},
};
# Now lets easily accomplish it.
my $obj = Object::AutoAccessor->build($struct);
print $obj->foo->bar->baz; # prints BUILD OK
# OK, now reverse it!
$obj->foo->bar->baz(TO HASHREF);
my $hashref = $obj->as_hashref;
print $hashref->{foo}->{bar}->{baz}; # prints TO HASHREF;
# Of course, new() can be used.
$obj = Object::AutoAccessor->new();
# setter methods
$obj->foo(bar);
$obj->set_foo(bar);
$obj->param(foo => bar);
# getter methods
$obj->foo();
$obj->get_foo();
$obj->param(foo);
# $obj->param() is compatible with HTML::Template->param()
my @keywords = $obj->param();
my $val = $obj->param(hash);
$obj->param(key => val);
my $tmpl = HTML::Template->new(..., associate => [$obj], ...);
Object::AutoAccessor is a Accessor class to get/set values by AUTOLOADed method automatically. Moreover, param() is compatible with HTML::Template module, so you can use Object::AutoAccessor object for HTML::Templates associate option.
<<lessSYNOPSIS
use Object::AutoAccessor;
my $struct = {
foo => {
bar => {
baz => BUILD OK,
},
},
};
# Now lets easily accomplish it.
my $obj = Object::AutoAccessor->build($struct);
print $obj->foo->bar->baz; # prints BUILD OK
# OK, now reverse it!
$obj->foo->bar->baz(TO HASHREF);
my $hashref = $obj->as_hashref;
print $hashref->{foo}->{bar}->{baz}; # prints TO HASHREF;
# Of course, new() can be used.
$obj = Object::AutoAccessor->new();
# setter methods
$obj->foo(bar);
$obj->set_foo(bar);
$obj->param(foo => bar);
# getter methods
$obj->foo();
$obj->get_foo();
$obj->param(foo);
# $obj->param() is compatible with HTML::Template->param()
my @keywords = $obj->param();
my $val = $obj->param(hash);
$obj->param(key => val);
my $tmpl = HTML::Template->new(..., associate => [$obj], ...);
Object::AutoAccessor is a Accessor class to get/set values by AUTOLOADed method automatically. Moreover, param() is compatible with HTML::Template module, so you can use Object::AutoAccessor object for HTML::Templates associate option.
Download (0.006MB)
Added: 2007-05-18 License: Perl Artistic License Price:
889 downloads
Fenris 0.07-m2 build 3245
Fenris is a multipurpose tracer, debugger, and code analysis tool. more>>
Fenris is a suite of tools suitable for code analysis, debugging, protocol analysis, reverse engineering, forensics, diagnostics, security audits, vulnerability research and many other purposes.
The main logical components are:
- Fenris: high-level tracer, a tool that detects the logic used in C programs to find and classify functions, logic program structure, calls, buffers, interaction with system and libraries, I/O and many other structures. Fenris is mostly a "whats inside" tracer, as opposed to ltrace or strace, tracers intended to inspect external "symptoms" of the internal program structure. Fenris does not depend on libbfd for accessing ELF structures, and thus is much more robust when dealing with "anti-debugging" code.
- libfnprints and dress: fingerprinting code that can be used to detect library functions embedded inside a static application, even without symbols, to make code analysis simplier; this functionality is both embedded in other components and available as a standalone tool that adds symtab to ELF binaries and can be used with any debugger or disassembler.
- Aegir: an interactive gdb-alike debugger with modular capabilities, instruction by instruction and breakpoint to breakpoint execution, and real-time access to all the goods offered by Fenris, such as high-level information about memory objects or logical code structure.
- nc-aegir: a SoftICE-alike GUI for Aegir, with automatic register, memory and code views, integrated Fenris output, and automatic Fenris control (now under development).
- Ragnarok: a visualisation tool for Fenris that delivers browsable information about many different aspects of program execution - code flow, function calls, memory object life, I/O, etc (to be redesigned using OpenDX or a similar data exploration interface).
- ...and some other companion utilities.
Code analysis is not limited to debugging, quality assurance or security audits. Understanding and handling file formats or communication protocols used by proprietary solutions, a problem that many corporations face when they decide to change their base software platform from one, obsolete or insufficient solution to another, perhaps more suitable, is a task that can consume long months and millions of dollars, especially when any misjudgment or misinterpretation is made.
Because of that, accurate and complete information about existing solutions has to be obtained and evaluated in a timely manner. This project is an attempt to fill the gap between currently used tools by providing a freely available program analysis utility, suitable for black-box code audits, algorithm analysis,
rapid reconnaissance in open-source projects, tracking down bugs, evaluating security subsystems, performing computer forensics, etc.
This program does not automate the process of auditing, and does not favor any particular use. Instead of that, it is intended to be a flexible and universal application that will be a valuable solution for many advanced users. While functional, it is probably not tested sufficiently, there are many issues to fix, several known bugs, some portability problems.
It is being released primarily to get user feedback, comments, and, most important, to request development support, as my resources are very limited, both in terms of available time and development platforms. This project is and will be distributed as a free software, regardless of projected use, accompanied by complete sources, under the terms and
conditions of GPL. Why do you might need this code? Well, there are few reasons...
Human beings are, so far, the best code analysts. Unlike computer programs, they have imagination, ability to build synthetic abstract models, and yet to observe and analyze smallest details at the same time. Functionality is often being described as "doing what the program is supposed to do", security as "doing what the program is supposed to do and
nothing more". While it might sound funny, that is the most general and complete definition we have. In most real-life scenarios only humans really know what are their expectations. Building strict formal models of our expectations does not necessarily mean that models themselves are flawless, and is very time-consuming. Then, even with such models,
validating the code is not always possible, due to its computational complexity. That is why real, live programs (not including some critical developments) do not have such models, do not follow any particular coding guidelines, and cannot be formally examined without human judgment.
Unfortunately, humans are also highly inaccurate and very expensive. They work slowly, and better results can be achieved by hiring better specialists and performing more careful audit. And after all, even the best expert can overlook something in complex, hard to read code. It is almost impossible for human to perform an accurate audit of a large, complex, heterogeneous project written e.g. in C - like Sendmail, BIND, Apache - and provide results in reasonable time.
Things get even worse when humans try to understand algorithms and protocols used by complex closed-source black box solutions. They are simply too slow, and not always able to make accurate guesses about dozens of complicated, conditional parameter passes and function calls before final action is taken.
While it might sound surprising, human-driven code audit is very similar to playing chess - it is a general analysis of possible states, way too many to be implicitly projected by our conscience, a result of experience, knowledge, some unparalleled capabilities of human brain, and luck. It is also a subject to false moves and misjudgment. And there are maybe just a few hundred excellent players.
As for today, freely and commercially available audit tools both use two opposite approaches. First approach tends to minimize human role by automating the review of source code. Source code analysis methods are good in spotting known, repeatable static errors in the code - such as format string vulnerabilities. On the other hand, static tools are not able to trace and analyze all possible execution paths of complex application by
simply looking at its source.
The reason for inability to follow all execution paths lies deeply in the foundations of modern computation theory, and one of its aspects is known as "the halting problem". Speaking in more general terms, in many cases (such as complex software, or even underlying operating system), the amount of medium needed to store all possible states of a complex program exceeds significantly the number of particles in the
universe; and the amount of time needed to generate and process them sequentially is greater than the lifetime of our universe, even having a machine that works with the speed of light.
This might be changed by the development of new computation models, such as quantum computing, or by creating mathematical models that allow us to make such problems non-polynomial - but for now, we are far from this point, and static analysis is restrained in many very serious ways, even though many software suppliers tend to market their products as the ultimate, 100% solutions. Subtle, complex, conditional dynamic errors, such as privilege dropping problems, input-dependent table overflows in C and many other issues usually cannot be detected without generating a completely unacceptable number of false positives.
This kind of software is highly dependent on coding style, and specific notation or development practices might render them less efficient - for example, automated audit utilities can usually detect problems like insecure call to strcpy() function, but will very likely not notice insecure manual copy in do-while
loop. The truth is, for programs that do not have previously built formal models, static auditing utilities look for known, common problems in known, common types of code in a very limited scope.
Another issue is the applicability of this approach to algorithm analysis tasks. In the domain of automated audit tools, this problem is "reduced" to building a formal model of program behavior, or, more appropriately, generating certain predictive statements about the code. While there are very interesting developments in this direction, such as the work of professor Patrick Cousot, it is very difficult to make any detailed, accurate and abstract enough run-time predictions for complex source code that has any immediate value in the analysis of unknown algorithm.
Last but not least, static analysis of sources can be deployed only when the source code is available, which does not have to be the case. This approach is a subject to many shortcomings, tricky assertions, and is a technique of strictly limited capabilities. This is, of course, not to dismiss this method - but to demonstrate that this much favored approach is not flawless and how much it needs to be accompanied with auxiliary methods.
The second approach to be discussed here is based on a dynamic run-time program analysis. This method is usually used to provide the user with information about actual program execution path, letting him make decisions on which path to follow and giving him free will to draw any conclusions and perform all the synthetic reasoning.
This method is
applied to a live binary executed in real-time and is based on monitoring syscalls (strace), libcalls (ltrace) or functions (xtrace); in certain cases, breakpoint debuggers, such as gdb, can be used, however it is usually not feasible to use them to perform anything more than in-depth analysis of a very small portion of program functionality. Usually, such analysis provides a very useful information on what is happening, and this information is provided in uniform, reduced-output form.
A careful auditor can analyze program behavior and find interesting or potentially dangerous run-time conditions. By monitoring how a given application interacts with external world, he (or she) can determine whether some other
conditions can be triggered and eventually explore them by examining sources or re-running the program. Advantages are enormous, as such software enables the auditor to spot very subtle errors in code that "looked good", to observe actual execution, not to try to figure it out, and to find or trace down not obvious or non-schematic vulnerabilities. Run-time trace tools are primarily used for fast reconnaissance tasks and for tracing down notorious errors that are not clearly visible in the source, significantly reducing the time of such operations.
There are, however, serious drawbacks related to this method. First of all, known tracing tools do not provide the complete information. They will detect strcpy() call, but wont report if exactly the same functionality has been implemented from scratch by the author of given program. And, in some cases, the amount of produced data
can be enormous, and because of its completely unstructured character, it makes the observation of overall execution vector almost impossible. Two most important problems are: correlating trace data with actual code, and determining what occurred in the "dark matter" between two lines of trace output.
There are some attempts to combine both approaches - run-time evaluation and source code analysis - such as Purify or many other commercial development support products. Unfortunately, they all feature a limited set of capabilities that need development-side or compilation-time support and are not really suitable for comprehending black box solutions or performing a general analysis. Most of them are targeted for dynamic memory debugging and code / memory profiling.
While not mentioned above, there is also another approach to black-box code - high-level decompiler. However, the complexity of modern compilers makes it very difficult to develop an effective C decompiler or similar utility, and there are only a few (two?) projects available to accomplish it, all of them not able to deal with too complex or optimized code. Finally, there is no guarantee that generated output code will be any help in comprehending the program. For now, this approach remains almost purely theoretical,
and I am not aware of any auditors using it extensively. Why? Well, heres an example of decompiled, mildly optimized code *with* some symbolic information: http://www.backerstreet.com/rec/ex386/hdgO.rec . One may argue it is less readable than cross-referenced disassembly.
This project, Fenris, is named after the monstrous wolf, son of the Norse god Loki. It is not the ultimate answer to all questions, not a solution for all problems, and under no circumstances is intended to replace other tools and techniques. On the other hand, it makes one step forward compared to other tools, trying to support the auditor and to make his work much more effective. This is accomplished by combining a number of techniques, including partial run-time decompiler, stateful analysis, code fingerprinting, I/O analysis, high-level visualization layer, traditional interactive debugger features and run-time code modification capabilities. The goal is to provide a very detailed trace information, and, at the same time, to provide data suitable to build a model of program behavior more quickly and in more convenient way.
Fenris is not supposed to find vulnerabilities or bugs, or to guess algorithms or describe protocols. It is supposed to report and analyze the execution path - detect and describe functional blocks, monitor data flow in the program, marking its lifetime, source, migration and destination, analyze how functions work and what conditions are evaluated.
At the end, it can deliver you an execution model of traced program (or arbitrarily chosen portion of it, if complete trace results in too much noise or irrelevant information), and hint you how this model can change in different conditions. Fenris does not need source codes of analyzed application, but obviously does not keep the auditor from using them.
For many users, Fenris might be a new tool or tools, for others - just a command-line replacement or addition to strace, ltrace, gdb or similar applications (theres a brief list of other nice tools in doc/other.txt). And thats the idea - to build a tool that is simple, reusable, but also precise and smart. It is supposed to have advantages over other tools, but not to be an ultimate replacement or the final solution. Some users can just use very specific features, such as automated function fingerprinting, and use companion tools instead of the main program.
<<lessThe main logical components are:
- Fenris: high-level tracer, a tool that detects the logic used in C programs to find and classify functions, logic program structure, calls, buffers, interaction with system and libraries, I/O and many other structures. Fenris is mostly a "whats inside" tracer, as opposed to ltrace or strace, tracers intended to inspect external "symptoms" of the internal program structure. Fenris does not depend on libbfd for accessing ELF structures, and thus is much more robust when dealing with "anti-debugging" code.
- libfnprints and dress: fingerprinting code that can be used to detect library functions embedded inside a static application, even without symbols, to make code analysis simplier; this functionality is both embedded in other components and available as a standalone tool that adds symtab to ELF binaries and can be used with any debugger or disassembler.
- Aegir: an interactive gdb-alike debugger with modular capabilities, instruction by instruction and breakpoint to breakpoint execution, and real-time access to all the goods offered by Fenris, such as high-level information about memory objects or logical code structure.
- nc-aegir: a SoftICE-alike GUI for Aegir, with automatic register, memory and code views, integrated Fenris output, and automatic Fenris control (now under development).
- Ragnarok: a visualisation tool for Fenris that delivers browsable information about many different aspects of program execution - code flow, function calls, memory object life, I/O, etc (to be redesigned using OpenDX or a similar data exploration interface).
- ...and some other companion utilities.
Code analysis is not limited to debugging, quality assurance or security audits. Understanding and handling file formats or communication protocols used by proprietary solutions, a problem that many corporations face when they decide to change their base software platform from one, obsolete or insufficient solution to another, perhaps more suitable, is a task that can consume long months and millions of dollars, especially when any misjudgment or misinterpretation is made.
Because of that, accurate and complete information about existing solutions has to be obtained and evaluated in a timely manner. This project is an attempt to fill the gap between currently used tools by providing a freely available program analysis utility, suitable for black-box code audits, algorithm analysis,
rapid reconnaissance in open-source projects, tracking down bugs, evaluating security subsystems, performing computer forensics, etc.
This program does not automate the process of auditing, and does not favor any particular use. Instead of that, it is intended to be a flexible and universal application that will be a valuable solution for many advanced users. While functional, it is probably not tested sufficiently, there are many issues to fix, several known bugs, some portability problems.
It is being released primarily to get user feedback, comments, and, most important, to request development support, as my resources are very limited, both in terms of available time and development platforms. This project is and will be distributed as a free software, regardless of projected use, accompanied by complete sources, under the terms and
conditions of GPL. Why do you might need this code? Well, there are few reasons...
Human beings are, so far, the best code analysts. Unlike computer programs, they have imagination, ability to build synthetic abstract models, and yet to observe and analyze smallest details at the same time. Functionality is often being described as "doing what the program is supposed to do", security as "doing what the program is supposed to do and
nothing more". While it might sound funny, that is the most general and complete definition we have. In most real-life scenarios only humans really know what are their expectations. Building strict formal models of our expectations does not necessarily mean that models themselves are flawless, and is very time-consuming. Then, even with such models,
validating the code is not always possible, due to its computational complexity. That is why real, live programs (not including some critical developments) do not have such models, do not follow any particular coding guidelines, and cannot be formally examined without human judgment.
Unfortunately, humans are also highly inaccurate and very expensive. They work slowly, and better results can be achieved by hiring better specialists and performing more careful audit. And after all, even the best expert can overlook something in complex, hard to read code. It is almost impossible for human to perform an accurate audit of a large, complex, heterogeneous project written e.g. in C - like Sendmail, BIND, Apache - and provide results in reasonable time.
Things get even worse when humans try to understand algorithms and protocols used by complex closed-source black box solutions. They are simply too slow, and not always able to make accurate guesses about dozens of complicated, conditional parameter passes and function calls before final action is taken.
While it might sound surprising, human-driven code audit is very similar to playing chess - it is a general analysis of possible states, way too many to be implicitly projected by our conscience, a result of experience, knowledge, some unparalleled capabilities of human brain, and luck. It is also a subject to false moves and misjudgment. And there are maybe just a few hundred excellent players.
As for today, freely and commercially available audit tools both use two opposite approaches. First approach tends to minimize human role by automating the review of source code. Source code analysis methods are good in spotting known, repeatable static errors in the code - such as format string vulnerabilities. On the other hand, static tools are not able to trace and analyze all possible execution paths of complex application by
simply looking at its source.
The reason for inability to follow all execution paths lies deeply in the foundations of modern computation theory, and one of its aspects is known as "the halting problem". Speaking in more general terms, in many cases (such as complex software, or even underlying operating system), the amount of medium needed to store all possible states of a complex program exceeds significantly the number of particles in the
universe; and the amount of time needed to generate and process them sequentially is greater than the lifetime of our universe, even having a machine that works with the speed of light.
This might be changed by the development of new computation models, such as quantum computing, or by creating mathematical models that allow us to make such problems non-polynomial - but for now, we are far from this point, and static analysis is restrained in many very serious ways, even though many software suppliers tend to market their products as the ultimate, 100% solutions. Subtle, complex, conditional dynamic errors, such as privilege dropping problems, input-dependent table overflows in C and many other issues usually cannot be detected without generating a completely unacceptable number of false positives.
This kind of software is highly dependent on coding style, and specific notation or development practices might render them less efficient - for example, automated audit utilities can usually detect problems like insecure call to strcpy() function, but will very likely not notice insecure manual copy in do-while
loop. The truth is, for programs that do not have previously built formal models, static auditing utilities look for known, common problems in known, common types of code in a very limited scope.
Another issue is the applicability of this approach to algorithm analysis tasks. In the domain of automated audit tools, this problem is "reduced" to building a formal model of program behavior, or, more appropriately, generating certain predictive statements about the code. While there are very interesting developments in this direction, such as the work of professor Patrick Cousot, it is very difficult to make any detailed, accurate and abstract enough run-time predictions for complex source code that has any immediate value in the analysis of unknown algorithm.
Last but not least, static analysis of sources can be deployed only when the source code is available, which does not have to be the case. This approach is a subject to many shortcomings, tricky assertions, and is a technique of strictly limited capabilities. This is, of course, not to dismiss this method - but to demonstrate that this much favored approach is not flawless and how much it needs to be accompanied with auxiliary methods.
The second approach to be discussed here is based on a dynamic run-time program analysis. This method is usually used to provide the user with information about actual program execution path, letting him make decisions on which path to follow and giving him free will to draw any conclusions and perform all the synthetic reasoning.
This method is
applied to a live binary executed in real-time and is based on monitoring syscalls (strace), libcalls (ltrace) or functions (xtrace); in certain cases, breakpoint debuggers, such as gdb, can be used, however it is usually not feasible to use them to perform anything more than in-depth analysis of a very small portion of program functionality. Usually, such analysis provides a very useful information on what is happening, and this information is provided in uniform, reduced-output form.
A careful auditor can analyze program behavior and find interesting or potentially dangerous run-time conditions. By monitoring how a given application interacts with external world, he (or she) can determine whether some other
conditions can be triggered and eventually explore them by examining sources or re-running the program. Advantages are enormous, as such software enables the auditor to spot very subtle errors in code that "looked good", to observe actual execution, not to try to figure it out, and to find or trace down not obvious or non-schematic vulnerabilities. Run-time trace tools are primarily used for fast reconnaissance tasks and for tracing down notorious errors that are not clearly visible in the source, significantly reducing the time of such operations.
There are, however, serious drawbacks related to this method. First of all, known tracing tools do not provide the complete information. They will detect strcpy() call, but wont report if exactly the same functionality has been implemented from scratch by the author of given program. And, in some cases, the amount of produced data
can be enormous, and because of its completely unstructured character, it makes the observation of overall execution vector almost impossible. Two most important problems are: correlating trace data with actual code, and determining what occurred in the "dark matter" between two lines of trace output.
There are some attempts to combine both approaches - run-time evaluation and source code analysis - such as Purify or many other commercial development support products. Unfortunately, they all feature a limited set of capabilities that need development-side or compilation-time support and are not really suitable for comprehending black box solutions or performing a general analysis. Most of them are targeted for dynamic memory debugging and code / memory profiling.
While not mentioned above, there is also another approach to black-box code - high-level decompiler. However, the complexity of modern compilers makes it very difficult to develop an effective C decompiler or similar utility, and there are only a few (two?) projects available to accomplish it, all of them not able to deal with too complex or optimized code. Finally, there is no guarantee that generated output code will be any help in comprehending the program. For now, this approach remains almost purely theoretical,
and I am not aware of any auditors using it extensively. Why? Well, heres an example of decompiled, mildly optimized code *with* some symbolic information: http://www.backerstreet.com/rec/ex386/hdgO.rec . One may argue it is less readable than cross-referenced disassembly.
This project, Fenris, is named after the monstrous wolf, son of the Norse god Loki. It is not the ultimate answer to all questions, not a solution for all problems, and under no circumstances is intended to replace other tools and techniques. On the other hand, it makes one step forward compared to other tools, trying to support the auditor and to make his work much more effective. This is accomplished by combining a number of techniques, including partial run-time decompiler, stateful analysis, code fingerprinting, I/O analysis, high-level visualization layer, traditional interactive debugger features and run-time code modification capabilities. The goal is to provide a very detailed trace information, and, at the same time, to provide data suitable to build a model of program behavior more quickly and in more convenient way.
Fenris is not supposed to find vulnerabilities or bugs, or to guess algorithms or describe protocols. It is supposed to report and analyze the execution path - detect and describe functional blocks, monitor data flow in the program, marking its lifetime, source, migration and destination, analyze how functions work and what conditions are evaluated.
At the end, it can deliver you an execution model of traced program (or arbitrarily chosen portion of it, if complete trace results in too much noise or irrelevant information), and hint you how this model can change in different conditions. Fenris does not need source codes of analyzed application, but obviously does not keep the auditor from using them.
For many users, Fenris might be a new tool or tools, for others - just a command-line replacement or addition to strace, ltrace, gdb or similar applications (theres a brief list of other nice tools in doc/other.txt). And thats the idea - to build a tool that is simple, reusable, but also precise and smart. It is supposed to have advantages over other tools, but not to be an ultimate replacement or the final solution. Some users can just use very specific features, such as automated function fingerprinting, and use companion tools instead of the main program.
Download (1.1MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1657 downloads
Data::Report 0.06
Data::Report provides a framework for flexible reporting. more>>
Data::Report provides a framework for flexible reporting.
Data::Report is a flexible, plugin-driven reporting framework. It makes it easy to define reports that can be produced in text, HTML and CSV. Textual ornaments like extra empty lines, dashed lines, and cell lines can be added in a way similar to HTML style sheets.
The Data::Report framework consists of three parts:
The plugins
Plugins implement a specific type of report. Standard plugins provided are Data::Report::Plugin::Text for textual reports, Data::Report::Plugin::Html for HTML reports, and Data::Report::Plugin::Csv for CSV (comma-separated) files.
Users can, and are encouraged, to develop their own plugins to handle different styles and types of reports.
The base class
The base class Data::Report::Base implements the functionality common to all reporters, plus a number of utility functions the plugins can use.
The factory
The actual Data::Report module is a factory that creates a reporter for a given report type by selecting the appropriate plugin and returning an instance thereof.
<<lessData::Report is a flexible, plugin-driven reporting framework. It makes it easy to define reports that can be produced in text, HTML and CSV. Textual ornaments like extra empty lines, dashed lines, and cell lines can be added in a way similar to HTML style sheets.
The Data::Report framework consists of three parts:
The plugins
Plugins implement a specific type of report. Standard plugins provided are Data::Report::Plugin::Text for textual reports, Data::Report::Plugin::Html for HTML reports, and Data::Report::Plugin::Csv for CSV (comma-separated) files.
Users can, and are encouraged, to develop their own plugins to handle different styles and types of reports.
The base class
The base class Data::Report::Base implements the functionality common to all reporters, plus a number of utility functions the plugins can use.
The factory
The actual Data::Report module is a factory that creates a reporter for a given report type by selecting the appropriate plugin and returning an instance thereof.
Download (0.016MB)
Added: 2007-03-31 License: Perl Artistic License Price:
937 downloads
GD::Dashboard 0.04
GD::Dashboard is a Perl module to create JPEG graphics of meters and dials. more>>
GD::Dashboard is a Perl module to create JPEG graphics of meters and dials.
SYNOPSIS
my $dash = new GD::Dashboard();
my $g1 = new GD::Dashboard::Gauge(
MIN=>0,
MAX=>$empcnt,
VAL=>$nopwp_cnt,
NA1=>3.14/2+0.85,
NA2=>3.14/2-0.85,
NX=>51,NY=>77,NLEN=>50
);
$dash->add_meter(RPM, $g1);
$dash->write_jpeg(dash.jpg);
The Dashboard module aims at providing users with a quick and easy way to create dashboard or cockpit like JPGs to display key information.
Dashboard supports the following instruments:
* Gauges with needles
* Bar type gauges
* Warning Lights
Dashboard is built on top of GD.pm, Licoln Steins interface to the GD library.
<<lessSYNOPSIS
my $dash = new GD::Dashboard();
my $g1 = new GD::Dashboard::Gauge(
MIN=>0,
MAX=>$empcnt,
VAL=>$nopwp_cnt,
NA1=>3.14/2+0.85,
NA2=>3.14/2-0.85,
NX=>51,NY=>77,NLEN=>50
);
$dash->add_meter(RPM, $g1);
$dash->write_jpeg(dash.jpg);
The Dashboard module aims at providing users with a quick and easy way to create dashboard or cockpit like JPGs to display key information.
Dashboard supports the following instruments:
* Gauges with needles
* Bar type gauges
* Warning Lights
Dashboard is built on top of GD.pm, Licoln Steins interface to the GD library.
Download (0.023MB)
Added: 2006-07-31 License: Perl Artistic License Price:
1187 downloads
Software::Packager::Rpm 0.06
Software::Packager::Rpm provides a common interface for the creation of platform specific software installation packagers. more>>
Software::Packager::Rpm is a suite of Perl modules providing a common interface for
the creation of platform specific software installation packagers.
add_item()
my %object_data = (
SOURCE => /source/file1,
TYPE => file,
KIND => doc,
DESTINATION => /usr/local/file1,
USER => joe,
GROUP => staff,
MODE => 0750,
);
$packager->add_item(%object_data);
This method overrides the add_item method in Software::Packager. It adds the ability to add extra features used by RPM for each object in the package.
For more details see the documentation in: Software::Packager Software::Packager::Object::Rpm
program_name()
$packager->program_name(SoftwarePackager);
my $program_name = $packager->program_name();
This method is used to set the name of the program that the package is installing. This may in should be the same as the package name but that is not required. It must not contain spaces or a dash "-" and must be all on one line.
version()
$packager->version(1.2.3.4.5.6);
my $version = $packager->version();
This method sets the version for the package to the passed value. The version passed cannot contain a dash "-" or spaces and must be on one line.
release()
This method sets the release version for the package. The release is the number of times the package has been recreated. If the release is not set then a default of 1 is used. It cannot contain spaces, a dash or new lines.
copyright()
This method sets the copyright type for the package. This should be the name of the copyright
source()
This method sets the source location for the package. This should be the URL for the source package used to create this package.
architecture()
$packager->architecture("sparc");
my $arch = $packager->architecture();
This method sets the architecture for the package to the passed value. If no argument is passed then the current architecture is returned. This is the output "from uname -p"
package_name()
my $name = $packager->package_name();
This method returns the name of the package that will be created.
short_description()
$packager->short_description("This is a short description.");
my $description = $packager->short_description();
The short description is just that a short description of the program. It must be all on one line.
description()
$packager->description("This is the description.");
my $description = $packager->description();
The description method sets the package description to the passed value. If no arguments are passed the package description is returned.
The discription can be of any length. It will be formatted by RPM in the following way:
If a line starts with a space it will be printed verbatim.
A blank line signifies a new paragraph.
All other lines will be assumed to be part of a paragraph and will be formatted by RPM.
package()
This method creates the package and returns true if it is successful else it returns undef
<<lessthe creation of platform specific software installation packagers.
add_item()
my %object_data = (
SOURCE => /source/file1,
TYPE => file,
KIND => doc,
DESTINATION => /usr/local/file1,
USER => joe,
GROUP => staff,
MODE => 0750,
);
$packager->add_item(%object_data);
This method overrides the add_item method in Software::Packager. It adds the ability to add extra features used by RPM for each object in the package.
For more details see the documentation in: Software::Packager Software::Packager::Object::Rpm
program_name()
$packager->program_name(SoftwarePackager);
my $program_name = $packager->program_name();
This method is used to set the name of the program that the package is installing. This may in should be the same as the package name but that is not required. It must not contain spaces or a dash "-" and must be all on one line.
version()
$packager->version(1.2.3.4.5.6);
my $version = $packager->version();
This method sets the version for the package to the passed value. The version passed cannot contain a dash "-" or spaces and must be on one line.
release()
This method sets the release version for the package. The release is the number of times the package has been recreated. If the release is not set then a default of 1 is used. It cannot contain spaces, a dash or new lines.
copyright()
This method sets the copyright type for the package. This should be the name of the copyright
source()
This method sets the source location for the package. This should be the URL for the source package used to create this package.
architecture()
$packager->architecture("sparc");
my $arch = $packager->architecture();
This method sets the architecture for the package to the passed value. If no argument is passed then the current architecture is returned. This is the output "from uname -p"
package_name()
my $name = $packager->package_name();
This method returns the name of the package that will be created.
short_description()
$packager->short_description("This is a short description.");
my $description = $packager->short_description();
The short description is just that a short description of the program. It must be all on one line.
description()
$packager->description("This is the description.");
my $description = $packager->description();
The description method sets the package description to the passed value. If no arguments are passed the package description is returned.
The discription can be of any length. It will be formatted by RPM in the following way:
If a line starts with a space it will be printed verbatim.
A blank line signifies a new paragraph.
All other lines will be assumed to be part of a paragraph and will be formatted by RPM.
package()
This method creates the package and returns true if it is successful else it returns undef
Download (0.013MB)
Added: 2007-01-11 License: Perl Artistic License Price:
1016 downloads
StateML 0.22
StateML is a State Machine Markup Language, with GraphViz and template-driven code generation. more>>
StateML is a State Machine Markup Language, with GraphViz and template-driven code generation.
SYNOPSIS
## See the stml command for command line use (recommended)
## Heres what a .stml file might look like:
< machine
id="main"
xmlns="http://slaysys.com/StateML/1.0"
xmlns:C="http://your.com/path/to/ns/for/C/code"
xmlns:Perl="http://your.com/path/to/ns/for/perl/code"
xmlns:Java="http://your.com/path/to/ns/for/Java/code"
...
>
< event id="init">
< C:api>void init_event_handler()< /C:api>
< /event>
< state id="#ALL" graphviz:style="dashed">
< arc event_id="init" goto="running">
< C:handler>init_device()< /C:handler>
< /arc>
< /state>
< state id="running"/>
< /machine>
use StateML;
my $machine = StateML->parse( $source ); ## filename, GLOB, etc.
StateML->parse( $source, $machine ); ## Add to existing machine
... process $machine as needed, see stml source for ideas...
WARNING: Alpha code. I use it in production, but you may want to limit your use to development only.
StateML is an XML dialect and a tool (stml) that reads this dialect (by default from files with a ".stml" extension) and converts it to source code using source code to a data structure.
It can then emit the data structure as a graphviz-generated image or graph specification or you may take the data structure and do what you want with it (bin/stml can pass it to template toolkit, for instance).
parse
my $m = StateML->parse( $StateML_string ) ;
my $m = StateML->parse( *F ) ;
<<lessSYNOPSIS
## See the stml command for command line use (recommended)
## Heres what a .stml file might look like:
< machine
id="main"
xmlns="http://slaysys.com/StateML/1.0"
xmlns:C="http://your.com/path/to/ns/for/C/code"
xmlns:Perl="http://your.com/path/to/ns/for/perl/code"
xmlns:Java="http://your.com/path/to/ns/for/Java/code"
...
>
< event id="init">
< C:api>void init_event_handler()< /C:api>
< /event>
< state id="#ALL" graphviz:style="dashed">
< arc event_id="init" goto="running">
< C:handler>init_device()< /C:handler>
< /arc>
< /state>
< state id="running"/>
< /machine>
use StateML;
my $machine = StateML->parse( $source ); ## filename, GLOB, etc.
StateML->parse( $source, $machine ); ## Add to existing machine
... process $machine as needed, see stml source for ideas...
WARNING: Alpha code. I use it in production, but you may want to limit your use to development only.
StateML is an XML dialect and a tool (stml) that reads this dialect (by default from files with a ".stml" extension) and converts it to source code using source code to a data structure.
It can then emit the data structure as a graphviz-generated image or graph specification or you may take the data structure and do what you want with it (bin/stml can pass it to template toolkit, for instance).
parse
my $m = StateML->parse( $StateML_string ) ;
my $m = StateML->parse( *F ) ;
Download (0.022MB)
Added: 2007-06-13 License: Perl Artistic License Price:
865 downloads
Linux Vacation 1.2.6.1
Linux vacation is a automatic mail-answering program. more>>
Linux VacationLinux vacation is a automatic mail-answering program. This is my vacation port to Linux. It is derived from the vacation program found on agate.berkeley.edu in the 386bsd directory on Nov 16, 1993. The original program was written by Eric Allman in 1983 and is copyrighted by the Regents of the UCB. The copyright disclaimer is valid for this distribution as well, i.e. this version is provided `as is, and I shall not be liable for any damage, data loss or earthquakes in the bay area.
Version 1.1 was a security-patched version. The former version 1.0 had a bad security bug which Olaf Kirch reported to the CERT mailing list (after giving me a hint :-). Please DO NOT LONGER USE vacation-1.0!
As far as Copyrights are concerned, the original parts of vacation are under the BSD copyright whereas I place my changed under the GPL (see file COPYING in the directory).
I tried to make this port look just like the version found with SunOS 4.1.x. There are minor differences, it resembles more the Sun version than the original 386bsd source.
Unpack the package as follows
mkdir -p /usr/src # if not already present :-)
chdir /usr/src
gzip -dc /vacation-1.1.tgz | tar xpvf -
A simple `make install (install-aout is no longer supported as of version 1.2) should install binary in /usr/bin and the manpages in /usr/man/man*, respectively. If you choose different directories, edit the Makefile.
<<lessVersion 1.1 was a security-patched version. The former version 1.0 had a bad security bug which Olaf Kirch reported to the CERT mailing list (after giving me a hint :-). Please DO NOT LONGER USE vacation-1.0!
As far as Copyrights are concerned, the original parts of vacation are under the BSD copyright whereas I place my changed under the GPL (see file COPYING in the directory).
I tried to make this port look just like the version found with SunOS 4.1.x. There are minor differences, it resembles more the Sun version than the original 386bsd source.
Unpack the package as follows
mkdir -p /usr/src # if not already present :-)
chdir /usr/src
gzip -dc /vacation-1.1.tgz | tar xpvf -
A simple `make install (install-aout is no longer supported as of version 1.2) should install binary in /usr/bin and the manpages in /usr/man/man*, respectively. If you choose different directories, edit the Makefile.
Download (0.046MB)
Added: 2006-06-24 License: GPL (GNU General Public License) Price:
1218 downloads
Secleted [ 0 ] software to compare
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above 1993 honda accord dash disassembly search only lists software in full, demo and trial versions for free download. Download links are directly from our mirror sites or publisher sites, torrent files or links from rapidshare.com, yousendit.com or megaupload.com are not allowed