Initial version
This commit is contained in:
commit
0e3e11e387
|
|
@ -0,0 +1 @@
|
||||||
|
/target
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fugg-fix-mapping"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"parity-wasm",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "1.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parity-wasm"
|
||||||
|
version = "0.42.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.43"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.144"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.144"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "1.0.85"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.99"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
[package]
|
||||||
|
name = "fugg-fix-mapping"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
parity-wasm = "0.42"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
use std::io::Read;
|
||||||
|
use std::{io::Write, fs::File};
|
||||||
|
use std::path::Path;
|
||||||
|
use std::fs::OpenOptions;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
struct FunctionFile {
|
||||||
|
imports: HashMap<String, String>,
|
||||||
|
exports: HashMap<String, String>
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let directory = Path::new("../fugg-fetch/out/55");
|
||||||
|
|
||||||
|
let input = directory.join("client-original.wasm");
|
||||||
|
let output = directory.join("client.wasm");
|
||||||
|
let functions_file = directory.join("functions.json");
|
||||||
|
|
||||||
|
let mut module = parity_wasm::deserialize_file(input).unwrap();
|
||||||
|
assert!(module.code_section().is_some());
|
||||||
|
|
||||||
|
let mut file = File::open(functions_file).unwrap();
|
||||||
|
let mut data = String::new();
|
||||||
|
file.read_to_string(&mut data).unwrap();
|
||||||
|
|
||||||
|
let functions: FunctionFile = serde_json::from_str(&data).expect("JSON was not well-formatted");
|
||||||
|
|
||||||
|
println!("Functions: {:?}", functions);
|
||||||
|
|
||||||
|
const MODULE: &str = "env";
|
||||||
|
|
||||||
|
{
|
||||||
|
let import_section = module.import_section_mut().unwrap();
|
||||||
|
|
||||||
|
for entry in import_section.entries_mut() {
|
||||||
|
let nice_name = functions.imports.get(entry.field());
|
||||||
|
|
||||||
|
*entry.module_mut() = String::from(MODULE);
|
||||||
|
if let Some(nice_name) = nice_name {
|
||||||
|
println!("Import: Renaming {}::{} to {}::{}", entry.module(), entry.field(), MODULE, nice_name);
|
||||||
|
|
||||||
|
*entry.field_mut() = String::from(nice_name);
|
||||||
|
} else {
|
||||||
|
println!("Import: Unable to find nice name for {}::{}", entry.module(), entry.field());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let export_section = module.export_section_mut().unwrap();
|
||||||
|
|
||||||
|
for entry in export_section.entries_mut() {
|
||||||
|
let nice_name = functions.exports.get(entry.field());
|
||||||
|
|
||||||
|
if let Some(nice_name) = nice_name {
|
||||||
|
println!("Export: Renaming {} to {}", entry.field(), nice_name);
|
||||||
|
|
||||||
|
*entry.field_mut() = String::from(nice_name);
|
||||||
|
} else {
|
||||||
|
println!("Export: Unable to find nice name for {}", entry.field());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let output_bytes = parity_wasm::serialize(module).unwrap();
|
||||||
|
let mut file = OpenOptions::new()
|
||||||
|
.write(true)
|
||||||
|
.create(true)
|
||||||
|
.open(output).unwrap();
|
||||||
|
|
||||||
|
file.write_all(&output_bytes).unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue